COM模块开发之应用示例
之前已经简单介绍了COM模块的框架以及COM模块支持的通讯模式有:Pub/Sub模式,Service/Client模式。上篇文章简单介绍了Pub/Sub通信模式以及Pub/Sub具体的示例,这次我们来了解一下Service/Client通信模式,以及通过具体的示例来了解一下工作模式。
Service/Client模式
Service/Client模式是一种常见的软件设计模式,用于实现分布式系统中的服务提供者和服务消费者之间的通信。该模式用于将系统中的功能组件分为两个角色:服务提供者(Service)和服务消费者(Client)。该模式是一种请求应答模式,client 发送请求,service 收到请求之后进行处理,然后将应答返回给 client;client 和 service 是 N:1 的关系。
在Service/Client模式中,服务提供者提供功能或服务,而服务消费者利用这些服务完成特定的任务。服务提供者通常在网络上运行,可以是独立的服务器或一组服务器构成的集群。服务消费者可以是其他应用程序、用户界面或者其他服务。
下面是Service/Client模式的基本工作流程:
注册服务:服务提供者将自己注册到一个中心化的注册中心,将其功能和服务信息共享给服务消费者。
发现服务:服务消费者向注册中心查询所需的服务信息,获取可用的服务提供者列表。
连接服务:服务消费者选择一个或多个服务提供者进行连接,建立通信链接。
请求服务:服务消费者发送请求消息给服务提供者,请求特定的功能或服务。
执行服务:服务提供者接收请求消息,执行相应的功能或服务,并生成结果。
返回结果:服务提供者将执行结果返回给服务消费者。
Service/Client模式的优点包括:
解耦性:通过这种模式,服务提供者和服务消费者之间可以相互独立演化和变化,减少了彼此之间的耦合关系。
可扩展性:系统可以通过增加或替换服务提供者来扩展功能,而不会影响现有的服务消费者。
可维护性:由于系统中的功能被分解为独立的服务,因此对于服务提供者和服务消费者的维护和调试都变得更加容易。
可复用性:相同的服务可以被多个服务消费者重复使用,提高了代码的重用性。
需要注意的是,Service/Client模式需要一个中心化的注册中心来协调服务提供者和服务消费者之间的通信。同时,网络通信和服务发现的性能也是该模式的一个考虑因素。
Service/Client模式示例
详细代码请参考:
example/service_example/service_example.cpp
example/service_example/client_example.cpp
在communication.json文件中添加配置相关的信息(以zmq ipc通信为例)
调用 hobot::communication::Init(“communication.json”) 接口
定义 service 的回调函数,用于接收 client 发送的消息,创建 service 通信实例
创建 client 通信实例
调用 client 接口发送数据(有同步和异步接口,这里以同步接口为例)
编译
编译成功:

编译生成的文件:

如果出现一下报错:

执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
service成功启动:

并且返回service处理完成后返回的信息

service成功收到请求,并处理:


