消息模型理解
业务与数据¶
在Service通讯模型中,我们通常都是Client将数据发送给Server,Server经过业务逻辑处理,将结果返回给client。如下图:
在此处,我们需要特别关注的就是传输过程中的Request
和Response
,这两个都是数据,一个是请求的数据,一个是响应的数据。从数据的角度来说,数据由业务所产生,但不应该与业务无关,应该与规范相关,其实就是定义规范来限制数据类型,来规范业务间的通讯。
在此,ROS提供的是srv数据
来做此操作,如下图:
Tip
在数据交互过程中的请求阶段,我们将整个包当成一个srv
,包含了request
和response
,这个阶段交给client
端去填充request
的数据。
在数据交互过程中的server处理阶段,server
拿到client
发送的srv包
,从中获得request
数据,根据业务逻辑来去处理操作数据。
在数据交互过程中的响应阶段,将server
操作的结果填充到srv
的response
,将srv返回。
在这三个阶段中,srv自始至终就是一个数据包,规范了client的数据填充,也规范了server的数据填充。
在ROS中对于Service通讯模式的数据类型,系统提供了一些现成的类型供我们参考和使用。
查询所有的消息类型¶
Tip
可以查询出当前支持的所有消息类型。例如我们用到过的roscpp_tutorials/TwoInts
查询消息类型的数据结构¶
我们还可以对一个消息的数据结构进行查询。
1 |
|
显示的结果为:
Tip
结果显示分为两个部分,中间用---
分隔。
上面部分是request
的数据规范。
下面部分是response
的数据规范。
发散与探讨¶
我们在前面可以发现,ros系统还是提供了大量的数据类型供我们使用。但是数据类型再多,很有可能也满足不了我的实际业务场景,这个时候,我们就需要定制自己的数据类型了。
后面我们会着重讲到如何是定制自己的数据类型。