设为首页 加入收藏

TOP

Golang通过Thrift框架完美实现跨语言调用
2014-11-24 02:36:40 来源: 作者: 【 】 浏览:2
Tags:Golang 通过 Thrift 框架 完美 实现 语言 调用

目录:


一、开发前准备
1、安装golang的Thrift包:
2、产生协议库:
3、生成开发库


二、go语言实现
1、服务器端
2、客户端程序


三、Java版实现
1、Java服务器版
2、Java客户端版


  每种语言都有自己最擅长的领域,Golang 最适合的领域就是服务器端程序。


  做为服务器端程序,需要考虑性能同时也要考虑与各种语言之间方便的通讯。采用http协议简单,但性能不高。采用TCP通讯,则需要考虑封包、解包、粘包等等很多因素,而且想写个高效的TCP服务,也很难。


  其实,对于此类需求,采用RPC(Remote Procedure Call Protocol)编程最靠谱。使用 RPC 编程被认为是在分布式环境中运行的客户机和服务器应用程序之间进行可靠通信的最强大、最高效的方法之一。


  Golang内置了对RPC支持,但只能适用于go语言程序之间调用。如果go语言能使用Thrift开发,那么就如虎添翼了。可惜,thrift虽然很早就提供了golang的代码,但一直都存在各种问题无法正确执行……直到0.9.1版本的发布!


  最近,Apache Thrift 0.9.1正式发布了。新版的Thrift终于对Golang提供了完美的支持。经过实验,服务器端、客户端已经完美支持跨语言调用,且性能、尤其是内存占用上,编译型语言的特点展现出来,比java版的实现强了很多。


  下面,我们采用golang实现一个Thrift的Server端和Client端程序。


一、开发前准备


1、安装golang的Thrift包:


go get git.apache.org/thrift.git/lib/go/thrift


2、产生协议库:


  这是我定义的测试用IDL,为检验兼容性,采用了多种数据结构:


RpcService.thrift


namespace go demo.rpc
namespace java demo.rpc


// 测试服务
service RpcService {


// 发起远程调用
list funCall(1:i64 callTime, 2:string funCode, 3:map paramMap),


}


3、生成开发库


  下载开发库编译器 http://www.apache.org/dyn/closer.cgi path=/thrift/0.9.1/thrift-0.9.1.exe


  thrift -gen go RpcService.thrift


  自动生成出的源码结构如下:



其中 constants.go、rpc_service.go、ttypes.go 是协议库,编写程序需要用到。rpc_service-remote.go 是自动生成的例程,可以不用。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇让Go语言调用外部程序时支持管道符 下一篇Gradle 构建 Android 应用常见问..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: