我正在尝试用Thrift编写一个简单的服务器。最初,它看起来很有希望,但是我遇到了一个问题,多个客户端同时连接。我使用的是TThreadPoolServer,它允许4个客户端连接,然后阻止其他客户端,直到我从连接的客户端中杀死一个。我该怎么做才能在不增加线程数的情况下同时连接更多(可能是几百个)客户端。我假设工作线程允许一次执行一个客户端请求,但是看起来一个线程会处理一个连接,直到关闭为止。我想避免客户端必须重新打开套接字才能执行操作的情况。
最佳答案
采取另一种方法,如果您使用C++来构建服务器,则可以使用TNonblockingServer而不是TThreadPoolServer,这将使您一次接受许多连接,而不管事件的线程数如何,等等。
话虽这么说,您不一定能够真正地更快地工作(处理程序仍在线程池中执行),但是更多的客户端将能够立即连接到您。
NB服务器的代码如下所示:
shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
shared_ptr<MyHandler> handler(new MyHandler());
shared_ptr<TProcessor> processor(new MyProcessor(handler));
TNonblockingServer server(processor, protocolFactory, port);