1.简述
本文主要介绍thrift多语言、跨语言的代码实例。Thrift对多语言的支持非常不错,定义一个thrift接口文件,
通过thrift IDL compiler(代码生成引擎)生成各个语言的代码,将各自语言的代码放入各自语言的工程中,
写好服务端和客户端程序,通信的问题即刻解决。
2.简单架构图
示例的thrift接口文件,test8.thrift:
service TestService {代码生成方法,文件定义方法,请参见thrift系列文章:
string test(1: i32 num,2: string name)
}
快速入门:http://blog.csdn.net/hrn1216/article/details/51274934
类型定义:http://blog.csdn.net/hrn1216/article/details/51306395
3.python code
python底层代码生成之后,需要加入到工程中去。请确保你的环境中有thrift模块,如果没有请下载安装。下载地址:https://pypi.python.org/pypi/thrift/0.9.3 。安装方法很简单,解压下载的包后,命令行进入到thrift-0.9.3的目录下,使用命令:python setup.py install 即可完成模块的安装。
下面是python工程的包结构:
以下是 python 服务端的代码:
# -*- coding:utf-8 -*-
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
#根据实际的包结构去引入
from test8 import TestService
#test8.thrift的具体实现
class TestServiceHandler:
def __init__(self):
self.log = {}
def test(self,num,name):
return name + str(num)
if __name__ == '__main__':
handler = TestServiceHandler()
processor = TestService.Processor(handler)
transport = TSocket.TServerSocket(host='127.0.0.1',port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print 'python server:ready to start'
server.serve()
4.java code
将生成的TestService.java加入到java工程中去,以下是java客户端的代码:
package test8;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;
public class Client {
public static void main(String[] args) {
//配置服务端的请求信息
TTransport transport = new TSocket("127.0.0.1", 9090);
try {
transport.open();
TProtocol protocol = new TBinaryProtocol(transport);
TestService.Client client = new TestService.Client(protocol);
//接口调用
String rs = client.test(123, "test");
//打印调用结果
System.out.println("java client:" + rs);
transport.close();
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
}
}
}
5.demo运行
先运行python的服务端,如果运行正常,将打印出:python server:ready to start
再运行java的客户端,如果运行正常,将打印出:java client:test123
本文内容参考如下:
【1】http://thrift.apache.org/
注意:
如您发现本文档中有明显错误的地方,
或者您发现本文档中引用了他人的资料而未进行说明时,请联系我进行更正。
转载或使用本文档时,请作醒目说明。
必要时请联系作者,否则将追究相应的法律责任。
note:
If you find this document with any error ,
Or if you find any illegal citations , please contact me correct.
Reprint or use of this document,Please explain for striking.
Please contact the author if necessary, or they will pursue the corresponding legal responsibility.