客户端项目中不可避免的要用到进程间的通信,方式也多种多样。单就开发而言,RPC这种模式最方便来做进程间通信的手段。因为类似于本地函数的调用。实现这个机制需要满足以下内容:
- 接口定义。一个组件是否方便使用,主要是看接口的设计是否简洁合理。
- 满足本地函数调用的特点:函数未执行完不返回,只需要函数签名和函数参数这些信息。
- 是否支持一对多。
调用方需要继承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这种模式最方便来做进程间通信的手段。因为类似于本地函数的调用。实现这个机制需要满足以下内容:
- 接口定义。一个组件是否方便使用,主要是看接口的设计是否简洁合理。
- 满足本地函数调用的特点:函数未执行完不返回,只需要函数签名和函数参数这些信息。
- 是否支持一对多。
调用方需要继承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来调用主调方的接口来告知结果。
来源:51CTO
作者:最爱吹吹风
链接:https://blog.csdn.net/linfengmove/article/details/100134422