微信开源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协定局部20bWorker线程数:20

性能测试后果(qps)

短连贯

ucontext类型/IO线程13820
system4.1w8.5w9w9.2w
boost4.5w9.5w9.5w9.5w

长连贯

ucontext类型/IO线程13820
system5.5w16w36w50w
boost6.2w17.5w41w50w

如何应用

编写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...