码迷,mamicode.com
首页 > 编程语言 > 详细

基于thrift的java和python分别作为客户端和服务端的调用实现

时间:2017-08-08 00:42:00      阅读:1079      评论:0      收藏:0      [点我收藏+]

标签:使用   pac   sage   sim   local   span   调用   python实现   name   

前面已经实现了纯java的thrift的实现。

现在实现实现一下python作为客户端和服务端的thrift的调用

1.python作为客户端,java作为服务端

java服务端代码参考前面写的博客

客户端python的准备:

1.使用mac下的PyCharm,专业的python开发工具

2.生成python代码

thrift --gen py thrift/data.thrift

3.在mac下安装thrift的python依赖

sudo python setup.py install 安装thrift的python依赖

4.查看安装依赖的路径

安装的路径:/Library/Python/2.7/site-packages

 

python客户端代码 :

# -*- coding:utf-8 -*-
__author__ = 作者
//导入thrift生成的业务代码
from py.com.fubin.netty import PersonService
from py.com.fubin.netty import ttypes
//导入thrift框架的代码
from thrift import Thrift
from thrift.transport import  TSocket
from thrift.transport import  TTransport
from thrift.protocol import   TCompactProtocol

//解决中文乱码问题
import sys reload(sys) sys.setdefaultencoding(utf-8 ) try: tSocket = TSocket.TSocket("localhost",8899) tSocket.setTimeout(600) transport = TTransport.TFramedTransport(tSocket) protocol = TCompactProtocol.TCompactProtocol(transport) client = PersonService.Client(protocol) transport.open() person = client.getPersonByUsername("zhangsan") print person.username print person.age print person.married print ======================= newPerson = ttypes.Person() newPerson.username = "付彬" newPerson.age = 11 newPerson.married = True client.savePerson(newPerson) transport.close() except Thrift.TException , tx: print %s % tx.message

 

中文乱码问题:导入系统库

import sys
reload(sys)
sys.setdefaultencoding(utf-8 )

 

python作为服务端 

1.编写业务接口类

# -*- coding:utf-8 -*-
__author__ = 作者

from py.com.fubin.netty import ttypes

class PersonServiceImpl :

    def getPersonByUsername(self,username):
        print  "got client param :" +username

        person = ttypes.Person()
        person.username = username
        person.age = 112
        person.married = True

        return person

    def savePerson(self ,person):
        print  "got client param : "

        print person.username
        print person.age
        print person.married

 

编写服务端初始化类:

# -*- coding:utf-8 -*-
__author__ = 作者

from py.com.fubin.netty import PersonService
from PythonServiceImpl import  PersonServiceImpl
from py.com.fubin.netty import ttypes

from thrift import Thrift
from thrift.transport import  TSocket
from thrift.transport import  TTransport
from thrift.protocol import   TCompactProtocol
from thrift.server import  TServer

import sys
reload(sys)

sys.setdefaultencoding(utf-8 )

try:

    personServiceHandler = PersonServiceImpl()
    processor = PersonService.Processor(personServiceHandler)

    serverSocket = TSocket.TServerSocket(port=8899)
    transportFactory = TTransport.TFramedTransportFactory()
    protocolFactory = TCompactProtocol.TCompactProtocolFactory()

    server = TServer.TSimpleServer(processor,serverSocket,transportFactory,protocolFactory)
    server.serve()

except Thrift.TException , tx:
    print %s % tx.message

 

 

到这里,一个简单的python实现的thrift调用例子就完成了。

 

不积跬步,无以至千里,每天进步一点点。

 

基于thrift的java和python分别作为客户端和服务端的调用实现

标签:使用   pac   sage   sim   local   span   调用   python实现   name   

原文地址:http://www.cnblogs.com/fubinhnust/p/7302462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!