当前位置: 首页 > wzjs >正文

设计互动网站建设什邡市建设局门户网站

设计互动网站建设,什邡市建设局门户网站,电子商务o2o是什么意思,重庆建设工程信息网哪里可以查看二级建造师已解锁当使用UDP或者SHM作为传输层时,我们经常看到7400、7410、7411、7412这些端口号。 那么这些端口号是怎么计算出来的?又有什么用呢? 如下图所示,使用fastdds中的例子delivery_mechanisms,指定传输层为UDPv4&#xff0c…

当使用UDP或者SHM作为传输层时,我们经常看到7400、7410、7411、7412这些端口号。

那么这些端口号是怎么计算出来的?又有什么用呢?

如下图所示,使用fastdds中的例子delivery_mechanisms,指定传输层为UDPv4,启动了两个publisher。启动的第一个publisher使用了端口号7400、7410、7411,第二个publisher使用了端口号7400、7412、7413。

dds流量有两类:发现流量和用户流量。发现流量(PDP/EDP)用于particiapant以及eriter/reader之间的发现;用户流量用于收发用户数据。

 

发现流量需要用到多播和单播。发现流量是用户流量的基础,只有相互发现的writer/reader之间才能够进行数据传输。发现流量作为dds工作的基础和发起点,发现流量没有前置条件,所以在同一个domain内,发现流量多播端口号需要时众所周知的。

发现流量:多播端口=PB + DG * domainId + d0

 其中PB是portBase,DG是domainIdGain,d0取值为0。

多播端口只受domaiId影响,所以在同一个domain内的所有participant均使用相同的多播端口,这也说明只有在同一个domain内的participant才能相互发现。

每一个participant创建之后,都要通过多播的方式想多播组内发布自己的信息。发现过程除了使用多播,还会使用单播。假如一个domain内有3个participant,分别为A、B、C。假如A发布的多播消息,那么B和C都会收到,如果B和A之间有相同topic的writer和reader,也就是说B和A是可以通信的,那么B就会向A发送单播消息,进行后续的协商,后边的协商过程均通过单播来实现。这里跟tcp建立连接的过程是有些相似的,tcp建立连接时,客户端需要向服务端发起连接,tcp服务端接收连接请求的是监听套接字,这个套接字类似与多播流量;当监听套接字收到连接请求后,会在创建一个新的套接字与客户端形成连接,后边的用户流量都通过新的套接字来进行。

发现流量:单播端口=PB + DG * domainId + d1 + PG * participantId

如果domainId是0,participantId也是0,那么发现流量的多播端口是7400,单播端口是7410。在函数RTPSParticipantImpl::createReceiverResources中,首先使用7410端口进行绑定,如果失败,那么会进行重试,重试就是重新选择一个新的端口来使用。在函数RTPSParticipantImpl::applyLocatorAdaptRule中选择新的端口,选择新的端口的算法就是在端口的基础上加上delta,默认情况下delta是2。

单播端口也不完全由domainId和participantId来决定。participantId的分配如下代码所示,同一个进程的同一个domain内,participantId都是从0开始的,也就是说participantId并不是domain内唯一的,而是domain和进程内唯一的。

如果我们使用udp传输层,但是publisher和subscriber在同一台机器上的两个进程中,那么两者的participantId都是0,那么两个进程都要使用单播端口7410吗?这样显然是不对的。

uint32_t RTPSDomainImpl::getNewId()

{

    // Get the smallest available participant ID.

    // Settings like maxInitialPeersRange control how many participants a peer

    // will look for on this host.

    // Choosing the smallest value ensures peers using unicast discovery will

    // find this participant as long as the total number of participants has

    // not exceeded the number of peers they will look for.

    uint32_t i = 0;

    while (m_RTPSParticipantIDs[i].reserved || m_RTPSParticipantIDs[i].used)

    {

        ++i;

    }

    m_RTPSParticipantIDs[i].reserved = true;

    return i;

}

bool RTPSParticipantImpl::createReceiverResources(

        LocatorList_t& Locator_list,

        bool ApplyMutation,

        bool RegisterReceiver,

        bool log_when_creation_fails)

{

   ...

    for (auto it_loc = input_list.begin(); it_loc != input_list.end(); ++it_loc)

    {

        Locator_t loc = *it_loc;

        bool ret = m_network_Factory.BuildReceiverResources(loc, newItemsBuffer, max_receiver_buffer_size);

        if (!ret && ApplyMutation)

        {

            uint32_t tries = 0;

            while (!ret && (tries < m_att.builtin.mutation_tries))

            {

                tries++;

                applyLocatorAdaptRule(loc);

                ret = m_network_Factory.BuildReceiverResources(loc, newItemsBuffer, max_receiver_buffer_size);

            }

        }

        ...

}

Locator_t& RTPSParticipantImpl::applyLocatorAdaptRule(

        Locator_t& loc)

{

    // This is a completely made up rule

    // It is transport responsibility to interpret this new port.

    uint16_t delta = m_att.port.participantIDGain;

    if (metatraffic_unicast_port_ == loc.port)

    {

        metatraffic_unicast_port_ += delta;

    }

    loc.port += delta;

    return loc;

}

 

一般情况下,用户的流量使用单播来进行,计算公式如下。同样的,如果单播端口已经被占用,那么就会进行重试,重试的算法是在上一个端口的基础上加2。

用户流量:单播端口=PB + DG * domainId + d3 + PG * participantId

 

这样我们就能知道下图中的端口分别是做什么用的了:

7400:两个进程的都会使用的组播端口,用于发现流量

7410:5013进程发现流量的单播端口

7411:5013进程用户流量的单播端口

 

7412:5025进程发现流量的单播端口

7413:5025进程用户流量的单播端口

 

共享内存借用UDP中端口的概念,还是使用例子delivery_mechanisms,指定传输层是SHM,在/dev/shm下可以看到如下文件,其中7400、7410、7411、7412、7413也是用来标记通信的端口。

 

http://www.dtcms.com/wzjs/544543.html

相关文章:

  • 豆瓣网站是怎么建设的十大网络平台
  • 贵州企业网站建设公司建设银行注册网站首页
  • 滨州网站建设模板建设医院网站备案
  • 做兼职那个网站比较好社交网站开发公司
  • 营销型网站模板住建网站需多少钱
  • 做川菜的网站wordpress页面难看
  • 招聘网站怎么做线下活动wordpress apache ssl
  • 大气公司网站源码 企业网页模板建站 制作asp程序后台 中英文代码科技公司内蒙古网站制作
  • 建设一个网站报价小学教学活动设计方案模板
  • 杭州滨江区建设局网站盗图来做网站
  • 厦门建设局网站商品房注册会计师报名时间
  • 网站下载免费做网站登录的需求分析
  • 我想开个网站成都网上商城网站建设
  • 甘肃省建设厅注册中心网站12355能找回智慧团建密码吗
  • 如何通过网站开发客户ag娱乐建设网站
  • 网站建设方案书一定要交国内响应式网站欣赏
  • 网站建设合同的风险责任桥梁建设网站
  • 做网站要什么步骤建设银行网站图片
  • 北京ifc大厦商城类网站怎么优化
  • 赣州热门网站wordpress右下角添加欢迎弹窗
  • 建设网站哪些公司好wordpress 模板丢失.
  • 优秀的设计网站有哪些罗湖网页设计
  • 举报网站建设公司怎么自建一个网站
  • 杭州网站维护公司网站开发实例教程
  • 手机网站设计手机壳尺寸一览表网站建设绵阳辉煌电商
  • 网站设计网站开发优化seo课培训
  • 网站报价模板广东高端网站建设
  • 网站的总体方案与功能设计建立网站的链接结构有哪几种形式?简述其各自的优缺点
  • 扬州市建设厅网站如何做网站调研
  • 个人相册网站建设报告公司网站建站哪个系统好用