rpc交互
一次 RPC 用两个 Topic,客户端和服务端各自一个 Writer、一个 Reader,方向交叉:
| Writer 写到 | Reader 订的 | |
|---|---|---|
客户端 |
|
|
服务端 |
|
|
客户端的请求 Writer 对上服务端的请求 Reader,请求从这边过去。服务端的回复 Writer 对上客户端的回复 Reader,结果从那边回来。
创建位置分别在requester_create和replier_create。客户端调用test_RPCTest_client_create时建自己那一对,服务端调用dds_service_create时建自己那一对。
rpc同步调用
调用方:RPC 是同步的。client->myMethod1(...)会停在当前线程里,直到服务端的回复到达,或者超过max_wait_time(demo 里是 10 秒),函数才返回。
客户端的顺序是:dds_write发出请求——在自己的 WaitSet 上调用dds_waitset_wait等回复——等回复的就是发起调用的那条线程,中间没有回调,也没有先返回一个 future 以后再取结果。myMethod2、myMethod3同样如此。
client
client rpc有三种method(rpc形态);
三个方法是同一种调用:都先发请求,再停住等回复,最后拿回一个ReturnCode。差别只在参数多少。
interface RPCTest{ ReturnCode myMethod1(in inputData indata, out outputData outdata); ReturnCode myMethod2(in inputData indata, in int32 value); ReturnCode myMethod3(); };