跨语言

Golang通过Thrift框架完美实现跨语言调用

*爱你&永不变心* 提交于 2019-12-01 21:52:20
  每种语言都有自己最擅长的领域,Golang 最适合的领域就是服务器端程序。   做为服务器端程序,需要考虑性能同时也要考虑与各种语言之间方便的通讯。采用 http 协议简单,但性能不高。采用 TCP 通讯,则需要考虑封包、解包、粘包等等很多因素,而且想写个高效的 TCP 服务,也很难。   其实,对于此类需求,采用 RPC ( Remote Procedure Call Protocol ) 编程最靠谱。使用 RPC 编程 被认为是在分布式环境中运行的客户机和服务器应用程序之间进行可靠通信的最强大、最高效的方法之一。   Golang 内置了对 RPC 支持,但只能适用于 go 语言程序之间调用,且貌似序列化、反序列化性能不高。如果 go 语言能使用 Thrift 开发,那么就如虎添翼了。可惜, thrift 虽然很早就包含了 golang 的代码,但一直都存在各种问题无法正确执行,以至于GitHub上有许多大牛小牛自行实现的Thrift代码,但依然各种问题……直到 0.9.1 版本的发布!   是的,最近, Apache Thrift 0.9.1 正式发布了。新版的 Thrift 终于对 Golang 提供了完美的支持。经过实验,服务器端、客户端已经完美支持跨语言调用,且性能、尤其是内存占用上,编译型语言的特点展现出来,比 java 版的实现强了很多。   下面,我们采用