为什么要代理
客户端1-1
客户端1-多
服务代理:
管理一个客户端要连接的所有服务端的代理
设计模式里的代理模式理念实现
class ServiceProxy
private
unrodered_map<string , void*> services_;
public
void* getService(name)
如果代理的服务有通用接口 call方法(InputParams outputParams)
class ServiceA:public ServiceBase
如果代理的服务没有通用接口 而且没有必要有
class ServiceA
public:
MethodA(){
//begin 螺丝钉
//end 螺丝钉
}
如果代理服务只有别人 那就相当于外部代理
如果代理也代理自己 自己想实现跨/插件模块调用 那就要增加自己
services_["self"]["DB"]
ervices_["self"]
services_["serviceA"]
services_["serviceB"]
ExternService.h
InternalService.h
外部有可能直接掉到内部,实现了插件级别接口代码服用
进程/服务/外部接口
插件/内部接口
服务代理=外部服务代理+self代理
头文件导出:只含有业务头文件 屏蔽第三方库比如opcua grpc thrift MQTT/Client 头疼 该采用什么技术呢?
代理使用步骤:
1、脚本隐藏式接口代码生成
2、服务端业务逻辑coding(同步/异步)
3、client 代理侧add Service实例
4、getService
5: Serivice接口调用
为什么要代理
该进程所有对接服务一目了然
屏蔽开源IPC方法书写过程
对外对内数据流清晰
屏蔽服务理念,业务人员甚至不需要知道自己调用什么服务了
ProcessPlugin.ini
producer.so
cache.so
cosumer.so
opcua的Call方法
UNO的方法调用
别人做opcua代理封装做了4-5个月
你猜我做RPC代理封装需要多久