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 之一。
- TThreadPoolServer
- TThreadedSelectorServer
- TNonBlockingServer
- half-sync/half-async server
请注意,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);
我正在执行 Apache Thrift tutorial for Java。
当运行2个客户端同时处理时,服务器不接受第2个客户端。只有在第一个客户端完成后,第二个客户端才会被服务器接受。
谁能解释一下这是怎么回事?
如何让服务器在多个线程中接受多个连接?
谁能解释一下这是怎么回事?
您已经发现了:TSimpleServer
一次只允许一个连接。当第一个客户端断开连接时,它将再次可用。
如何让服务器在多个线程中接受多个连接?
使用 threading servers, whichever fits your use case best 之一。
- TThreadPoolServer
- TThreadedSelectorServer
- TNonBlockingServer
- half-sync/half-async server
请注意,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);