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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于thrift的java和python分别作为客户端和服务端的调用实现相关的知识,希望对你有一定的参考价值。

前面已经实现了纯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分别作为客户端和服务端的调用实现的主要内容,如果未能解决你的问题,请参考以下文章

基于Thrift的跨语言高可用高性能轻量级的RPC框架

Apache Thrift系列详解- 概述与入门

Thrift 或 Protocol buffer 作为跨语言序列化解决方案?

Python 中使用 HTTPS 的示例 Apache Thrift 服务

Thrift 简单实现C#通讯服务程序 (跨语言 MicroServices)

Thrift快速入门