写点什么

微信开源 C/C++ RPC 框架 PhxRPC

用户头像
OpenIM
关注
发布于: 4 小时前

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 空转情况。

运行环境

CPU:24 x Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz内存:32 GB网卡:千兆网卡Client/Server机器之间PING值: 0.05ms请求写入并发:1000个线程业务数据大小:除去HTTP协议部分20bWorker线程数:20
复制代码

性能测试结果(qps)

短连接

长连接

如何使用

编写 proto 文件

下面是 sample 目录下的 proto 文件样例。



生成代码

(PhxRPC根目录)/codegen/phxrpc_pb2server -I (PhxRPC根目录) -I (Protobuf include目录) -f (proto文件路径) -d (生成代码放置路径)#sample../codegen/phxrpc_pb2server -I ../ -I ../third_party/protobuf/include -f search.proto -d .调用完工具后,在生成代码放置目录下执行make,即可生成全部的RPC相关代码。
复制代码

选择是否启用 boost 优化

打开生成代码放置目录下的 Makefile 文件。


#choose to use boost for network
#LDFLAGS := $(PLUGIN_BOOST_LDFLAGS) $(LDFLAGS)
复制代码


可以看到以上两行,取消注释掉第二行,重新 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

用户头像

OpenIM

关注

还未添加个人签名 2021.08.30 加入

还未添加个人简介

评论

发布
暂无评论
微信开源C/C++ RPC框架PhxRPC