这两天因为工作需要查了一些跨语言的rpc接口。我这里指的是包含序列化和tcp交互的。

主要查了一下以下三类:

1.ICE 这玩意不支持go,直接放弃。

2.GRPC,这玩意刚刚发布,还且全面使用C++11特性,我们生产环境目前还没升级,他依赖于protobuf 3.0.0版本,这个还是beta版,拿过来编译了下,依赖google的gmock。我的虚拟机上连不上去,只能暂时作罢。

3.Thrift,这个从0.9.1 就开始完美(官方)支持go语言了,那就拿这个操刀吧。

 

注:C++测试环境ubuntu12.04LTS  内核 3.2.0-23 GCC版本4.6.3  Go就在win7笔记本上跑的。

第一件事安装thrift,从官网下载最新thrift0.9.2版本。

编译安装参考 http://my.oschina.net/zc741520/blog/399049

libevent库我这边前段时间用到了就不用安装了,使用的版本是2.0.22-stable

 

GO版本thrift从这个地址

git-wip-us.apache.org/repos/asf/thrift.git/lib/go/thrift获取哦 
git.apache.org/thrift.git/lib/go/thrift永远超时。

thrift文件如下:

我把world写错了...=_=!

thrift --gen cpp helloword.thrift  

thrift --gen go helloword.thrift

生成的C++文件么有问题,go里面要修改下test.go和contants.go的thrift库的位置

 

下面开始撸C++代码了。

C++ server端代码

C++ Client端代码

 

编译server端

编译Client端

测试C++没有问题。


写GO的代码:

GO server端

GO client代码

当然测试也没有问题。

 

下面就是交叉访问了。

当然基于以上代码同样没有问题,哈哈哈哈,因为问题被我K了啊 。附上截图。

C++ client端 与 GO server端

 

GO client VS C++ server 同样没有问题我就不截图了。

后面文章说下遇到的问题及分析。