真的无语,搞了一个下午。
使用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