我正在尝试使用c ++在Windows上构建TCP服务器。我知道如果我想与所有客户沟通,我可以使用线程。一个线程处理一个客户端。我想知道是否有其他方法来处理这项任务,例如:
std::vector<SOCKET> clients;
while(clients.size() < 1024){
SOCKET ss = accept(ListenSocket, NULL, NULL);
clients.push_back(ss);
}
while(true){
SOCKET speckingClient = Function(clients);
iResult = recv(speckingClient, recvbuf, recvbuflen, 0);
// the rest of the function...
}
以上代码无法运行,但希望能够显示我正在寻找的内容。
答案 0 :(得分:3)
是的,有更好的技术。
首选方法是使用select()
(或更可能是其替换之一)。可选择使用线程池。
select()
允许您同时等待多个端口上的输入。当输入可用(或空间可用于写入)时,选择返回允许您处理所有端口上的所有可用输入/输出。
您应该在google上查找C10K问题。您将找到许多关于如何编写处理许多传入客户端请求的服务器的文章。