基于Test来使用12-Thrift_Python

人工智能

631人已加入

描述

Thrift_Python/…使用

Python/Node.js/Golang/Php… 都差不多,都可以完成服务和客户端的编写,这里以Python为例。

Thrift的Python端既可以写服务器,也可以写客户端。 (Golang请参考之前的文章)

Server端

为了兼容JS端,我们这里都以一下要求为标准。

要求:(否则JS无法解析)

Json Protocol打包协议

Http Transport通信

MultipleProtocol/Processer(非必需)

1. 业务代码源

同其他语言,使用thrift编译工具,将xxx.thrift文件编译为xx.py文件,通过pip安装thrift基础python库即可。

参考命令:thrift -o . -out ./pyModule --gen py Robot.thrift , pip install thrift

2. 使用方法# coding: utf-8importsys sys.path.append("./pyModule")fromthrift.transportimportTHttpServerfromthrift.protocolimportTJSONProtocolfromthrift.protocol.TMultiplexedProtocolimportTMultiplexedProtocolimportRobotimportRobot.AudioclassRobotAudioHandle:defTtsPlay(self, strTxt, nPlayPriority):""" Parameters: - strTxt - nPlayPriority """print("RobotAudioHandle:",strTxt,nPlayPriority)passhandler = RobotAudioHandle() processor = Robot.Audio.Processor(handler) server = THttpServer.THttpServer(TMultiplexedProcessor(processor,"Audio"), ("127.0.0.1",9000), TJSONProtocol.TJSONProtocolFactory) print("Server start...") server.serve()

这个代码可以仿照Golang的Demo,几乎一样。

吐槽一下:Python的包机制真是个坑!!!

Client端

不多说什么,直接看代码吧~~

Robot源代码库使用服务器那份,方法相同。

# coding: utf-8importsys sys.path.append("./pyModule")fromthrift.transport.THttpClientimportTHttpClientfromthrift.protocol.TJSONProtocolimportTJSONProtocolfromthrift.protocol.TMultiplexedProtocolimportTMultiplexedProtocolimportRobotimportRobot.AudioclassRobotProxy:defflush(self):sys.stdout.flush()def__init__(self):self.Robot_tans =Noneself.protocol =Noneself.Audio =Noneself.Robot_tans = THttpClient("http://127.0.0.1:9000/robot") self.protocol = TJSONProtocol(self.Robot_tans)try: self.Audio = Robot.Audio.Client(TMultiplexedProtocol(self.protocol,"Audio"))except: print("Audio Proxy error!")try: self.Robot_tans.open()except: print("Robot_tans or protocol error!") print("Load RobotProxy Module...") app = RobotProxy()

之前写了太多服务端的代码,写的有点烦了,这里就不做太多解析,直接看代码就好。 ��

总结

Python作为脚本很简单好用,但是在编写严格的代码时真的很是抓狂,特备是Thrift这类文档不丰富的库时,简直要疯掉。

本篇的代码时通过Test项目学习得来的,路漫漫其修远兮~

这就是Thrift的坑,文档太少了。

其他语言的代码,这里省略了。如果有什么问题,请查看Test目录,参考学习。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分