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系统上)。