阅读过zmq的代码之后,感觉这个网络层是我目前见过最高效的–线程之间使用lockfree的消息队列保存消息,可以启动多个I/O线程分担压力等等特性.于是决定基于它写一个protobuf RPC的框架.
不过有一些遗憾,目前zeromq的几种pattern中,都不是特别的符合我的想法.REQ/REP模式是一问一答必须成对匹配出现,这样基于它的客户端就必须要等待server端的回复才能继续下去,这种做法同步阻塞住了程序,没有办法将请求异步化.PAIR模式倒是可以不阻塞,但是只能一对一的通信,没有办法多对一.如果以后能有结合了REP/REQ模式和PAIR模式的产物,就方便很多,貌似zeromq团队正在做让使用者定制模式的改动,以后再说吧.
另外,这里使用的protobuf是旧版本2.3.0,新版本2.4.1的生成的RPC service接口跟原来不太一致,暂时还没有去研究它.BTW,升级版本之后导致原来的接口发生变化这是一个很操蛋的事情.
今晚花了大概两个小时,写了几百行的代码,代码放在这里.还算是够简洁,使用的模式是REP/REQ,如前面所说,这样client端就得阻塞等待server端响应才能继续下一步操作了.sample目录是我写的一个基于这个框架的echo 服务器,使用者可以对照着使用这个框架写自己的RPC服务.