fastrtps 网络端口的计算-以共享内存为例

root用户,运行./fastrtps/examples/cpp/dds/HelloWorldExampleSharedMem/DDSHelloWorldExampleSharedMem publisher

创建以下文件描述符

$ ll /dev/shm/
总用量 2232
drwxrwxrwt  2 root root     260 111 09:37 ./
drwxr-xr-x 19 root root    4640 107 13:14 ../
-rw-rw-rw-  1 root root 2122272 111 09:37 fastrtps_fb0567544297e750
-rw-rw-rw-  1 root root       0 111 09:37 fastrtps_fb0567544297e750_el
-rw-rw-rw-  1 root root   52400 111 09:37 fastrtps_port7400
-rw-rw-rw-  1 root root       0 111 09:37 fastrtps_port7400_sl
-rw-rw-rw-  1 root root   52400 111 09:37 fastrtps_port7410
-rw-rw-rw-  1 root root       0 111 09:37 fastrtps_port7410_el
-rw-rw-rw-  1 root root   52400 111 09:37 fastrtps_port7411
-rw-rw-rw-  1 root root       0 111 09:37 fastrtps_port7411_el
-rw-rw-rw-  1 root root      32 111 09:37 sem.fastrtps_port7400_mutex
-rw-rw-rw-  1 root root      32 111 09:37 sem.fastrtps_port7410_mutex
-rw-rw-rw-  1 root root      32 111 09:37 sem.fastrtps_port7411_mutex

yong用户,运行./fastrtps/examples/cpp/dds/HelloWorldExampleSharedMem/DDSHelloWorldExampleSharedMem subscriber

$ ll /dev/shm/
总用量 2344
drwxrwxrwt  2 root root     360 111 09:38 ./
drwxr-xr-x 19 root root    4640 107 13:14 ../
-rw-rw-rw-  1 root root 2122272 111 09:37 fastrtps_fb0567544297e750
-rw-rw-rw-  1 root root       0 111 09:37 fastrtps_fb0567544297e750_el
-rw-rw-rw-  1 root root   52400 111 09:37 fastrtps_port7400
-rw-rw-rw-  1 root root       0 111 09:37 fastrtps_port7400_sl
-rw-rw-rw-  1 root root   52400 111 09:37 fastrtps_port7410
-rw-rw-rw-  1 root root   52400 111 09:37 fastrtps_port7411
-rw-rw-rw-  1 root root       0 111 09:37 fastrtps_port7411_el
-rw-rw-rw-  1 yong yong   52400 111 09:37 fastrtps_port7412
-rw-rw-rw-  1 yong yong       0 111 09:37 fastrtps_port7412_el
-rw-rw-rw-  1 yong yong   52400 111 09:37 fastrtps_port7413
-rw-rw-rw-  1 yong yong       0 111 09:37 fastrtps_port7413_el
-rw-rw-rw-  1 root root      32 111 09:37 sem.fastrtps_port7400_mutex
-rw-rw-rw-  1 root root      32 111 09:37 sem.fastrtps_port7410_mutex
-rw-rw-rw-  1 root root      32 111 09:37 sem.fastrtps_port7411_mutex
-rw-rw-rw-  1 yong yong      32 111 09:37 sem.fastrtps_port7412_mutex
-rw-rw-rw-  1 yong yong      32 111 09:37 sem.fastrtps_port7413_mutex

fastrtps_fb0567544297e750_el独占锁 只有pub才会创建
el是 RobustExclusiveLock 缩写
sl是RobustSharedLock 缩写

本程序默认 domainId =0、participantId=0
PG=Paricipant Id Gain 默认2
rtps端口计算规则:
应用首个进程的端口计算方法,eg:pid=1;每个进程端口默认+PG(2),eg:Pid=2

Traffic typeWell-known port expressionpid = 1pId = 3
Metatraffic multicast7400 + 250 * domainId74007400
Metatraffic unicast7400 + 250 * domainId + 10 + 2 * participantId74107412
User multicast7400 + 250 * domainId + 1
User unicast7400 + 250 * domainId + 11 + 2 * participantId74117413
fasrtps 代码:
RTPSParticipantImpl.cpp
bool RTPSParticipantImpl::createReceiverResources(
        LocatorList_t& Locator_list,
        bool ApplyMutation,
        bool RegisterReceiver)
{
    //略...
    for (auto it_loc = Locator_list.begin(); it_loc != Locator_list.end(); ++it_loc)
    {
        bool ret = m_network_Factory.BuildReceiverResources(*it_loc, newItemsBuffer, max_receiver_buffer_size);
        if (!ret && ApplyMutation)
        {
            uint32_t tries = 0;
            while (!ret && (tries < m_att.builtin.mutation_tries))
            {
                tries++;
                applyLocatorAdaptRule(*it_loc);
                ret = m_network_Factory.BuildReceiverResources(*it_loc, newItemsBuffer, max_receiver_buffer_size);
            }
        }
 
        ret_val |= !newItemsBuffer.empty();
 
        for (auto it_buffer = newItemsBuffer.begin(); it_buffer != newItemsBuffer.end(); ++it_buffer)
        {
            std::lock_guard<std::mutex> lock(m_receiverResourcelistMutex);
            //Push the new items into the ReceiverResource buffer
            m_receiverResourcelist.emplace_back(*it_buffer);
            //Create and init the MessageReceiver
            auto mr = new MessageReceiver(this, (*it_buffer)->max_message_size());
            m_receiverResourcelist.back().mp_receiver = mr;
            //Start reception
            if (RegisterReceiver)
            {
                m_receiverResourcelist.back().Receiver->RegisterReceiver(mr);
            }
        }
        newItemsBuffer.clear();
    }
 
    return ret_val;
}
 
Locator_t& RTPSParticipantImpl::applyLocatorAdaptRule(
        Locator_t& loc)
{
    // This is a completely made up rule
    // It is transport responsibility to interpret this new port.
    loc.port += m_att.port.participantIDGain;
    return loc;
}
内容概要:本文档详细介绍了基于Google Earth Engine (GEE) 构建的阿比让绿地分析仪表盘的设计与实现。首先,定义了研究区域的几何图形并将其可视化。接着,通过云掩膜函数和裁剪操作预处理Sentinel-2遥感影像,筛选出高质量的数据用于后续分析。然后,计算中值图像并提取NDVI(归一化差异植被指数),进而识别绿地及其面积。此外,还实现了多个高级分析功能,如多年变化趋势分析、人口-绿地交叉分析、城市热岛效应分析、生物多样性评估、交通可达性分析、城市扩张分析以及自动生成优化建议等。最后,提供了数据导出、移动端适配和报告生成功能,确保系统的实用性和便捷性。 适合人群:具备一定地理信息系统(GIS)和遥感基础知识的专业人士,如城市规划师、环境科学家、生态学家等。 使用场景及目标:①评估城市绿地分布及其变化趋势;②分析绿地与人口的关系,为城市规划提供依据;③研究城市热岛效应及生物多样性,支持环境保护决策;④评估交通可达性,优化城市交通网络;⑤监测城市扩张情况,辅助土地利用管理。 其他说明:该系统不仅提供了丰富的可视化工具,还集成了多种空间分析方法,能够帮助用户深入理解城市绿地的空间特征及其对环境和社会的影响。同时,系统支持移动端适配,方便随时随地进行分析。用户可以根据实际需求选择不同的分析模块,生成定制化的报告,为城市管理提供科学依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值