微信开源 C /C++ RPC 框架 PhxRPC
PhxRPC 是微信后盾团队推出的一个十分简洁玲珑的 RPC 框架,编译生成的库只有 450K。
PhxRPC 开源地址:
https://github.com/tencent-we…
总览
- 应用 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 协定局部 20b
Worker 线程数:20
性能测试后果(qps)
短连贯
ucontext 类型 /IO 线程 | 1 | 3 | 8 | 20 |
---|---|---|---|---|
system | 4.1w | 8.5w | 9w | 9.2w |
boost | 4.5w | 9.5w | 9.5w | 9.5w |
长连贯
ucontext 类型 /IO 线程 | 1 | 3 | 8 | 20 |
---|---|---|---|---|
system | 5.5w | 16w | 36w | 50w |
boost | 6.2w | 17.5w | 41w | 50w |
如何应用
编写 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-we…
OpenIMgithub 开源地址:
https://github.com/OpenIMSDK/…
OpenIM 官网:https://www.rentsoft.cn
OpenIM 官方论坛:https://forum.rentsoft.cn/
更多技术文章:
开源 OpenIM:高性能、可伸缩、易扩大的即时通讯架构
https://forum.rentsoft.cn/thr…
【OpenIM 原创】简略轻松入门 一文解说 WebRTC 实现 1 对 1 音视频通信原理
https://forum.rentsoft.cn/thr…