参考文章:1、http://www.kankanews.com/ICkengine/archives/54084.shtml
2、http://www.javabloger.com/article/thrift-java-code-example.html
3、http://www.cnblogs.com/liping13599168/archive/2011/09/15/2176836.html
Golang内置了对RPC支持,但只能适用于go语言程序之间调用。Thrift是一种可伸缩的跨语言服务框架,它支持C++,C#,Java,Python,Go等多种语言。
thrift允许你定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。
这种方式与微软的WCF框架以及Android中的AIDL服务的做法很类似。
1、安装Go语言的thrift包
参考文章1给出的地址是:go get git.apache.org/thrift.git/lib/go/thrift,但该地址现在似乎不能访问了,请使用下面的命令:
go get github.com/apache/thrift/lib/go/thrift
2、下载脚本编译器
下载地址:http://www.apache.org/dyn/closer.cgi?path=/thrift/0.9.1/thrift-0.9.1.exe
该编译工具可将thrift脚本文件编译为目标变成语言代码。
3、创建脚本
创建脚本文件 test.thrift ,脚本文件内容采用参考文章2中的代码:
namespace java com.javabloger.gen.code # 注释1 定义生成代码的命名空间,与你需要定义的package相对应。
struct Blog
{ #
注释2.1 定义实体名称和数据结构,类似你业务逻辑中的pojo
get/set
1: string
topic # 注释2.2
参数类型可以参见 Thrift
wiki
2: binary content
3: i64 createdTime
4: string id
5: string ipAddress
6: map<string,string>
props
}
service ThriftCase { #
注释3
代码生成的类名,你的业务逻辑代码需要实现代码生成的ThriftCase.Iface接口
i32 testCase1(1:i32 num1, 2:i32 num2, 3:string
num3) #注释4.1 方法名称和方法中的入参,
list<string>
testCase2(1:map<string,string> num1)
void testCase3()
void testCase4(1:list<Blog>
blog) # 注释4.2 list
是thrift中基本数据类型中的一种,list中包含的Blog对象是上面struct中定义的
}
4、编译脚本
执行 thrift -gen go x:\test.thrift 命令,参数go表示生成go代码,可以根据实际情况使用csharp,java,python等参数。
5、示例代码
下面我们使用Go语言实现服务端,C#语言实现客户端,进行跨语言调用。(未完待续)
原文:http://www.cnblogs.com/wenjingu/p/3522026.html