我正在执行Apache Thrift tutorial for Java。
当同时运行2个客户端进程时,服务器不接受第二个客户端。只有在第一个客户端完成后,服务器才会接受第二个客户端。
任何人都可以解释一下发生了什么吗?
如何让服务器在多个线程中接受多个连接?
答案 0 :(得分:2)
任何人都可以解释一下发生了什么吗?
您已经发现:TSimpleServer
一次只允许一个连接。当第一个客户端断开连接时,它将再次可用。
如何让服务器在多个线程中接受多个连接?
使用其中一个threading servers,以fits your use case best为准。
请注意,some of the servers require the client to use TFramedTransport
。
答案 1 :(得分:1)
根据其他答案,以下是允许同时执行多个客户端的代码。
服务器(简单):
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);