我正在尝试在客户端和服务器端使用TNonblockingServerSocket
和TFramedTransport
,但会收到以下错误:
TTransportException: java.net.SocketException: Software caused connection abort: recv failed
。
服务器代码:
TServerTransport serverTransport = new TNonblockingServerSocket(9090);
TThreadPoolServer.Args args = new TThreadPoolServer.Args(serverTransport);
args.processor(processor);
args.transportFactory(new TFramedTransport.Factory());
TServer server = new TThreadPoolServer(args);
server.serve();
客户代码:
transport = new TSocket("localhost", 9090);
transport.open();
TProtocol protocol = new TBinaryProtocol(new TFramedTransport(transport));
Calculator.Client client = new Calculator.Client(protocol);
切换回TServerSocket
而不是TNonblockingServerSocket
时,一切正常 - 即使使用框架式传输也是如此。
知道我在这里缺少什么吗?
答案 0 :(得分:0)
我切换到THsHaServer
而不是TThreadPoolServer,一切正常。奇怪。
我仍然不知道为什么它与TThreadPoolServer
无关:(
答案 1 :(得分:0)
正如JensG先前的评论中提到的,TNonblockingServerSocket仅用于TNonblockingServer。
理论上,这些信息(以及一些其他类似信息)可能可以在Java的类型系统中进行编码。如果您有具体的建议,那么您可以在此处报告: https://issues.apache.org/jira/browse/THRIFT
实际上,在Java的类型系统(或C ++的类型系统,或在此插入随机语言)中编码某些类型信息可能太困难或繁重。在这些情况下,问题通常最好通过文档或快速失败来解决。