微信开源 C/C++ RPC 框架 PhxRPC
PhxRPC 是微信后台团队推出的一个非常简洁小巧的 RPC 框架,编译生成的库只有 450K。
PhxRPC 开源地址:
https://github.com/tencent-wechat/phxrpc
总览
使用 Protobuf 作为 IDL 用于描述 RPC 接口以及通信数据结构。
基于 Protobuf 文件自动生成 Client 以及 Server 接口,用于 Client 的构建,以及 Server 的实现。
半同步半异步模式,采用独立多 IO 线程,通过 Epoll 管理请求的接入以及读写,工作线程采用固定线程池。IO 线程与工作线程通过内存队列进行交互。
提供完善的过载保护,无需配置阀值,支持动态自适应拒绝请求。
提供简易的 Client/Server 配置读入方式。
基于 lambda 函数实现并发访问 Server,可以非常方便地实现 Google 提出的 Backup Requests 模式。
局限
不支持多进程模式。
性能
使用 Sample 目录下的 Search RPC C/S 进行 Echo RPC 调用的压测,相当于 Worker 空转情况。
运行环境
性能测试结果(qps)
短连接
长连接
如何使用
编写 proto 文件
下面是 sample 目录下的 proto 文件样例。
生成代码
选择是否启用 boost 优化
打开生成代码放置目录下的 Makefile 文件。
可以看到以上两行,取消注释掉第二行,重新 make clean, make 即可开启 boost 对 PhxRPC 的优化。开启前记得编译好 PhxRPC 的 boost 插件。
补充自己的代码
Server(xxx_service_impl.cpp)
Client (xxx_client.cpp)
Client 并发调用样例
uthread_begin
, uthread_end
, uthread_s
, uthread_t
这几个关键字是 PhxRPC 自定义的宏,分别表示协程的准备,结束,协程调度器以及协程的创建。
上面的代码实现了 Google 提出的 Backup Requests 模式。实现的功能是分别对两个 Server 同时发起 Echo 调用,当有一个 Server 响应的时候,则整个函数结束。在这段代码里面,我们提供了一种异步 IO 的同步写法,并给予了一些方便使用的宏定义。首先使用uthread_begin
进行准备,然后使用uthread_t
以 lambda 的形式创建一个协程,而在任意一个协程里面都可使用我们 PhxRPC 生成的 Client API 进行 RPC 调用,并可使用uthread_s
随时结束所有 RPC 调用。最后的uthread_end
真正通过协程调度发起这些 lambda 内的 RPC 调用,并等待结束。
当然你可以借用这 4 个宏定义,以同步代码的写法,进行更自定义的并发访问。
Server 配置说明 (xxx_server.conf)
本文系微信后台团队,如有侵犯,请联系我们立即删除
hxRPC 开源地址:
https://github.com/tencent-wechat/phxrpc
OpenIMgithub 开源地址:
https://github.com/OpenIMSDK/Open-IM-Server
**OpenIM 官网 :**https://www.rentsoft.cn
**OpenIM 官方论坛:**https://forum.rentsoft.cn/
更多技术文章:
开源 OpenIM:高性能、可伸缩、易扩展的即时通讯架构https://forum.rentsoft.cn/thread/3
【OpenIM 原创】简单轻松入门 一文讲解 WebRTC 实现 1 对 1 音视频通信原理https://forum.rentsoft.cn/thread/4
评论