Apache Thrift 教程客户端在使用 2 个客户端时卡住 - 如何使服务器多任务?

Apache Thrift tutorial client stuck when using 2 clients - how to make the server multitask?

我正在执行 Apache Thrift tutorial for Java

当运行2个客户端同时处理时,服务器不接受第2个客户端。只有在第一个客户端完成后,第二个客户端才会被服务器接受。

谁能解释一下这是怎么回事?

如何让服务器在多个线程中接受多个连接?

谁能解释一下这是怎么回事?

您已经发现了:TSimpleServer 一次只允许一个连接。当第一个客户端断开连接时,它将再次可用。

如何让服务器在多个线程中接受多个连接?

使用 threading servers, whichever fits your use case best 之一。

请注意,some of the servers require the client to use TFramedTransport

根据其他答案,下面是可以同时执行多个客户端的代码。

服务器(简单):

CalculatorHandler handler = new CalculatorHandler();
Calculator.Processor processor = new Calculator.Processor(handler);
TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(9090);
THsHaServer.Args args = new THsHaServer.Args(serverTransport);
args.processor(processor);
args.transportFactory(new TFramedTransport.Factory());
TServer server = new THsHaServer(args);
server.serve();

客户:

transport = new TSocket("localhost", 9090);
transport.open();
TProtocol protocol = new  TBinaryProtocol(new TFramedTransport(transport));
Calculator.Client client = new Calculator.Client(protocol);
perform(client);