赞
踩
IPC通道(例如消息队列或UNIX域套接字)上的服务发现是不可执行的,因为传输的数据较大,这可能会导致多个帧的传输。如果发现大量高频服务,例如在启动时,IPC通道可能会成为瓶颈。
iox::expected<InstanceContainer, FindServiceError> PoshRuntime::findService(capro::ServiceDescription)
runtime::IpcMessage{ProcessManager,PortManager}::findService(caper::ServiceDescription)
在RouDi收到来自运行时的请求后调用
通过IPC通道将应答发送回“PoshRuntime”
用户界面应具有轮询和推送通知界面。
请求/响应和发布/订阅主题应由用户发现和区分。
必须保证用户不会破坏服务发现
应提供C接口
内存开销应该最小,以便在各种环境中启用此功能
性能应针对默认用例进行优化,在默认用例中,大多数服务都是在启动时创建的,并且在运行时服务发现的变化最小。
在不影响系统的情况下,每个应用程序都可以同时使用服务发现。
ServiceRegistry创建抽象接口
将新类添加到StaticServiceRegistry::StaticServicesRegistry(std::map<CaproIdString_t,instance_t>map)
基于通知的回调只调用一次,并且用户获得完整的服务注册表
使用“FindService()”进行轮询将始终返回相同的结果
另一种选择是在初始化阶段之后使用“finalize()”方法
在RouDi中创建一个发送“ServiceRegistryTopic”的新发布者。此发布者将用于发出服务注册表中的更改信号,并传输服务发现注册表。完整的旧服务注册表(保存在本地)将与新类中的新服务注册表进行比较,从而扩展公共用户API。
在RouDi中创建一个发送“ServiceRegistryTopic”的新发布者。此发布者将用于发出服务注册表中的更改信号,并传输服务发现注册表。完整的旧服务注册表(保存在本地)将与新类中的新服务注册表进行比较,从而扩展公共用户API。
Pro:
Con:
注:
iceoryx_management
段(内省发布者也是如此)传统的发布者和订阅者没有针对发送不经常或从不更改的数据(例如参数、配置或内省数据)进行优化。在传统的发布者和订阅者被重新用作“StatusPort”的情况下,就像在备选方案D中一样,内存消耗很高,并且在某些情况下很少需要(比如启动)。因此,应引入一类新的端口,称为“StatusPort”。在内部,只能使用两个内存块,类似于“iox::concurrent::TACO”,使用ABA计数器检查作者是否在阅读时进行了写作(弗兰肯斯坦对象)。读者应将ServiceRegistryTopic从共享存储器复制到本地副本。仅支持可复制的琐碎数据。客户端数据不应直接访问,而应通过lambda访问。
Pro:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。