首页 > 编程语言 >关于thrift python接口和java通信出现问题解决

关于thrift python接口和java通信出现问题解决

时间:2024-02-16 22:13:01浏览次数:37  
标签:java python 端口 server TSocket transport thrift

真的无语,搞了一个下午。

使用thrift出现错误,先说一下遇到第一个错误,如下图:

那时候代码是这叼样

``` if __name__ == '__main__': handler = MessageServiceHandler() processor = MessageService.Processor(handler) transport = TSocket.TServerSocket(None, "9090") tfactory = TTransport.TFramedTransportFactory() pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print ("python thrift server start")
server.serve()
print ("python thrift server exit")
后面怀疑是不是版本问题,就把python和java的thrift版本统一到了0.10.0,pom文件也改了还是不行,就继续看代码。
就看到thrift服务调用端的通信的代码

TSocket socket = new TSocket(ip, port, 3000);
TTransport transport = new TFramedTransport(socket);
try {
transport.open();
} catch (TTransportException e) {
e.printStackTrace();
return null;
}
TProtocol protocol = new TBinaryProtocol(transport);

怀疑timeout太短造成的,这想想也不可能,但我还是将3000改成了10000,还是没用。
所以到底为啥,我调用另一个服务的thrift竟让成功,这就疑惑了,难道是没开服务。
使用命令行查看发现有啊还在监听,当时也不知道这开没开,就稀里糊涂觉得端口开了。

TCP    [::1]:9090             [::]:0                 LISTENING       5284
那难道是thrift版本太低不能用了,也不可能,看别人用得好好的,为啥自己不能用。
就去搜python和java接口通信,没啥用,就重新把thrift的接口重新生成了一遍。然后DBUG调试
调试到transport.open();这行代码就报错返回空,然后问ai发现代码没问题,还说可能是防火墙阻止,但我想同一台服务器能阻止啥。
百思不得其所,就把网上thrift的文章浏览一遍,就只知道对方拒绝连接。还有文章说9090端口是默认端口啥的。
后面改了端口,发现还是没用,就统一了ip,ip也没有问题了,全是127.0.0.1,本来就没问题。
后面吃个饭想了想,换一种思路搜,“python使用thrift”仔细看了一遍,复制了下面的代码

handler = HelloWorldHandler()
processor = HelloWorld.Processor(handler)
transport = TSocket.TServerSocket('127.0.0.1',30303)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)


发现成了,原来是TSocket.TServerSocket("localhost",9090),前面字符串用了双引号或者用None都不行,改成单引号,还有端口不要加引号,小问题但折磨人。

标签:java,python,端口,server,TSocket,transport,thrift
From: https://www.cnblogs.com/15078480385zyc/p/18017556

相关文章

  • Java中正则表达式(regex)匹配多行(Pattern.MULTILINE和Pattern.DOTALL模式)
    ​ Java中,正则表达式(regex)的处理是通过Pattern类实现的。Pattern类提供了多种标志(flags)来修改正则表达式的行为。其中,Pattern.MULTILINE和Pattern.DOTALL是两个常用的模式,它们分别用于处理多行文本和让.匹配包括行终止符在内的任意字符。 参考文档:Java中正则表达式(regex)匹......
  • 第 8章 Python 爬虫框架 Scrapy(下)
    第8章Python爬虫框架Scrapy(下)8.1Scrapy对接Selenium有一种反爬虫策略就是通过JS动态加载数据,应对这种策略的两种方法如下:分析Ajax请求,找出请求接口的相关规则,直接去请求接口获取数据。使用Selenium模拟浏览器渲染后抓取页面内容。8.1.1如何对接单独使用Sc......
  • (学习日记)三、BootSrap-JavaScript
    6.BootStrap6.1什么是bootstrap?-别人写好的css模板-Bootstrap中文网(bootcss.com)<!DOCTYPEhtml><html><head><title>BootStrap_Demo</title><metacharset="UTF-8"><linkrel="stylesheet"href=&quo......
  • Python 装饰器
    Python装饰器装饰器原理定义本质是函数,用来装饰其他函数,为其他函数添加附加功能原则不能修改被装饰函数的源代码不能修改被装饰的函数的调用方式实现装饰器知识储备函数就是变量高阶函数把一个函数当作实参传给另外一个函数,在不修改被装饰函数源代码情况下为......
  • python - flask wsgi
    直接使用flask自带的wsgi,关闭debug模式会出现以下警告fromflaskimportFlaskapp=Flask(__name__,static_folder="./static")app.run(host="0.0.0.0",port=8080,debug=False)#WARNING:Thisisadevelopmentserver.Donotuseitinaproductiondeployme......
  • python基础学习7-文件以及oa操作
    操作文件步骤打开/创建变量名=open(filename,mode,encoding)操作变量名.read()变量名.write()关闭变量名.close()withopen(...)asfile:passjson模块json.dumps(obj)json(lst,ensure_ascli=False,indent=4)防止中文乱码,和提供缩进美化json.loads(......
  • python类的实现中有关__setattr__原理问题
    python类的实现中有关__settar__原理问题具体解决思路问题代码段:classCustomAttributes:def__init__(self):self._attributes={}def__setattr__(self,name,value):#允许设置名为'_attributes'的属性,这是实现所必......
  • Python 爬取历史天气数据
    网站原始数据https://www.tianqishi.com/hangzhou/20240214.html源码importrequestsfrombs4importBeautifulSoupimportdatetimedefgetEachDayWeather(loaction,timeStamp):"""获取每一天的天气数据"""#1.获取网页地址urlHea......
  • 如何使用TailwindCSS和JavaScript构建自定义的HTML5视频播放器
    HTML5自带了一个原生视频播放器。它在浏览器中配备了简单的用户界面、功能和一些基本的控件。尽管通过浏览器的默认视频播放器的功能完美运行,但用户界面并不那么美观和时尚,总体上并不令人满意。因此,大多数现代Web应用程序和平台,如Udemy、Netflix、YouTube和AmazonPrime,不会将默......
  • Python--操作列表
    Python--操作列表遍历整个列表对于每个元素的执行操作,使用单数和复数的名称,可用帮助判断代码片段处理的是单个列表元素还是整个列表.magicians=['alice','bob','charlie']formagicianinmagicians:print(magician)#alice#bob#charlie在for循环中可以执......