RPC进程间通信的一种实现

匿名 (未验证) 提交于 2019-12-02 23:56:01

客户端项目中不可避免的要用到进程间的通信,方式也多种多样。单就开发而言,RPC这种模式最方便来做进程间通信的手段。因为类似于本地函数的调用。实现这个机制需要满足以下内容:

  1. 接口定义。一个组件是否方便使用,主要是看接口的设计是否简洁合理。
  2. 满足本地函数调用的特点:函数未执行完不返回,只需要函数签名和函数参数这些信息。
  3. 是否支持一对多。

调用方需要继承RPCService类,构造函数需要传入连接名称,RPCService根据这个名字与被调方建立连接。通过Invoke方法调用远程方法。Invoke需要传入要调用的函数名和函数参数,目前支持int double string bool四种参数类型,具体可参考invoke_def.h中的定义。也可以在该文件扩展 GetParam方法以支持更多参数类型。

要时当前类获取接受能力,还需要有以前步骤:

DEF_PROCESS_INVOKE(类名)

需要在当前类头文件中定义该类可以接受远程调用,

BEGIN_INVOKE(类名)

ON_INVOKE_3(函数名, int, QString, int)

END_INVOKE

以上定义类似MFC中消息路由,用来定义该类中那个函数可以被远程调用,参数为被调用函数名和函数参数类型。ON_INVOKE_数字,数字代表的是参数个数,目前最多支持3个参数的函数,已经满足大部分应用,可以在invoke_def.h中进行扩充。

调用方和被调用方不必关心RPC启动顺序

RPCService目前只支持1对1,主要考虑到多对多可能会导致的等待问题。

Invoke方法目前不支持返回值,如果需要结果,只能通过被调用方再次调用Invoke来调用主调方的接口来告知结果。

实际使用参考项目中的类:

RPCProcessor \ NimIMRPC

客户端项目中不可避免的要用到进程间的通信,方式也多种多样。单就开发而言,RPC这种模式最方便来做进程间通信的手段。因为类似于本地函数的调用。实现这个机制需要满足以下内容:

  1. 接口定义。一个组件是否方便使用,主要是看接口的设计是否简洁合理。
  2. 满足本地函数调用的特点:函数未执行完不返回,只需要函数签名和函数参数这些信息。
  3. 是否支持一对多。

调用方需要继承RPCService类,构造函数需要传入连接名称,RPCService根据这个名字与被调方建立连接。通过Invoke方法调用远程方法。Invoke需要传入要调用的函数名和函数参数,目前支持int double string bool四种参数类型,具体可参考invoke_def.h中的定义。也可以在该文件扩展 GetParam方法以支持更多参数类型。

要时当前类获取接受能力,还需要有以前步骤:

DEF_PROCESS_INVOKE(类名)

需要在当前类头文件中定义该类可以接受远程调用,

BEGIN_INVOKE(类名)

ON_INVOKE_3(函数名, int, QString, int)

END_INVOKE

以上定义类似MFC中消息路由,用来定义该类中那个函数可以被远程调用,参数为被调用函数名和函数参数类型。ON_INVOKE_数字,数字代表的是参数个数,目前最多支持3个参数的函数,已经满足大部分应用,可以在invoke_def.h中进行扩充。

调用方和被调用方不必关心RPC启动顺序

RPCService目前只支持1对1,主要考虑到多对多可能会导致的等待问题。

Invoke方法目前不支持返回值,如果需要结果,只能通过被调用方再次调用Invoke来调用主调方的接口来告知结果。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!