rpclib是一个 C++的 RPC 库,基于 MessagePack 进行二进制序列化和反序列化,底层使用 TCP 进行进程间通信。其功能与 Facebook 的 Thrift、Google 的 Protocol Buffers 相似,但 rpclib 更加轻量级,不需要依赖 Boost,而且不用声明接口描述文件。
rpclib 官网:
1. 编译
使用 CMake 生成对应编译系统的项目文件,编译即可,也可以使用 vcpkg 进行安装,如:
1  | vcpkg install rpclib:x86-windows-static  | 
2. 简单应用
rpclib 有服务端和客户端概念,只能由客户端调用服务端,接受服务端的返回值,服务端不能主动调用客户端函数。如需实现两端双向调用,则需要在两端分别启动一个服务端和客户端,并彼此相连。
rpclib 库的错误是通过 C++异常抛出的,因此在使用该库时需要使用 try...catch 进行异常捕获。
2.1 服务端
在服务端完成端口监听,及函数的绑定操作。
1  | 
  | 
2.2 客户端
客户端通过 IP 和端口连接服务端,并调用服务端的函数。
1  | 
  | 
2.3 支持的参数和返回值类型
rpclib 使用 MessagePack 进行序列化,支持的数据类型与 MessagePack 相同。
支持如下 C++类型:
- bool
 - char*
 - double
 - float
 - char,不支持 wchar_t
 - short
 - int
 - long
 - long long
 - std::string,不支持 std::wstring
 - std::vector
 - std::array
 - std::map
 - std::shared_ptr
 - std::unique_ptr
 
3. 广告
在这里推荐我的veigar框架,一个基于共享内存的rpc框架,与rpclib相比有如下的优势:
没有服务端和客户端的概念,每个Veigar实例间都可以相互调用。
没有网络问题,如端口占用、半关闭状态等。
没有诡异的端口假可用性问题(特别是在Windows系统上)。