This specification defines a Remote Procedure Calls (RPC) framework using the basic building blocks of DDS, such as topics, types, DataReaders, and DataWriters to provide request/reply semantics. It defines distributed services, described using a service interface, which serves as a shareable contract between service provider and a service consumer. It supports synchronous and asynchronous method invocation. Despite its similarity, it is not intended to be a replacement for CORBA.
DDS-RPC又叫PRC over DDS,RPC指Remote Procedure Calls,关于RPC的概念请自行温习。根据字面意思,以及OMG给出的定义。DDS-RPC可以总结为:
DDS-RPC构建在DDS上,实现请求/应答通信机制。
OMG给出了DDS-RPC这种通信机制,自然要定义一套规范,DDS-RPC的实现方要遵循这个套规范进行实现,这样即使不同的DDS-RPC实现方,它们相互之间,可可以利用DDS-RPC通信。
由于DDS-RPC是构造在DDS之上的,因此DDS-RPC通信的实现过程,包括以下几个关键点:
所谓服务定义是指:如何描述RPC中的服务接口信息。
下面给出一个例子IDL文件(DDS使用IDL作为接口文件)。
module robot { // 模块
interface RobotControl // 接口
{
void command(Command com); // 函数
void getStatus(out Status status);
float setSpeed(float speed);
}
}
详细请参考:https://www.omg.org/spec/DDS-RPC/1.0/PDF (7.3 Service Definition)
@DDSService
@DDSRequestTopic (name=“RobotRequestTopic”) // @DDSRequestTopic (Requset主题注释关键字)
@DDSReplyTopic (name=”RobotReplyTopic”) // @DDSReplyTopic (Rely主题注释关键字)
interface RobotControl
{
}
详细请参考:https://www.omg.org/spec/DDS-RPC/1.0/PDF (Chapter 7.4)
struct RobotControl_Request
{
dds::rpc::RequestHeader header;
RobotControl_Call data;
};
应答主题
struct RobotControl_Reply
{
dds::rpc::ReplyHeader header;
RobotControl_Return data;
};
${interfaceName}_$ {operationName}_In
// 例:
RobotControl_setSpeed_In
${interfaceName}_${operationName}_Out
// 例
RobotControl_setSpeed_Out
关于请求与应答主题,如何映射,这里只简单介绍了一小部分。详细规则,请参考
https://www.omg.org/spec/DDS-RPC/1.0/PDF
${interfaceName}_Call
// 例
union RobotControl_Call switch(long)
应答(interface)映射:
union RobotControl_Return switch(long)
关于 服务映射,这里只说了一小部分。更多的内容,请参考:
https://www.omg.org/spec/DDS-RPC/1.0/PDF
OMG给出的IDL定义实例,请参考:
https://www.omg.org/spec/DDS-RPC/About-DDS-RPC/
【RPC over DDS 1.0 IDL .zip file】
请求与应答是两个独立的DDS Topic,因此不能保证两个主题同时被发现。
例:
请求主题发现完成。应答主题未发现。此时,服务器能够接收数据,但无法返回数据给服务的调用者。
DDS-RPC针对上述问题,定义了发现/匹配RPC服务机制,可以简单总结为:
详细请参考:https://www.omg.org/spec/DDS-RPC/1.0/PDF(7.6)
详细内容请参考:https://www.omg.org/spec/DDS-RPC/1.0/PDF
【DDS】DDS与OpenDDS
【DDS】DDS-RPC通信机制
【DDS】基于OpenDDS的DDS-RPC实现