gpt4 book ai didi

sockets - Winsock API是否自动多线程?

转载 作者:行者123 更新时间:2023-12-03 12:01:05 26 4
gpt4 key购买 nike

我正在使用Microsoft Windows WinSock API拧小型HTTP服务器。

处理多个用户时是否需要应用多线程逻辑?

当前,Windows会在发生网络事件时发送一条消息,并且每条消息
(在wParam中)携带要在send()或recv()中使用的套接字。

当客户端A连接并请求几个文件时,通常有多个套接字
由Winsock创建。然后,我的服务器收到一条消息,“将该文件发送到
套接字123”和更高版本“将该文件发送到套接字456”

当另一个客户端连接时,它也会获得一些套接字,例如789和654。

然后,我的服务器使用提供的套接字号响应发送数据的请求。它
不必知道谁想要该文件,因为必须将正确的文件发送到
正确的 socket 。

我不知道Windows本身在处理时是否使用多个线程
接受连接并将消息发送到我的程序。

所以我的问题是:

处理多个用户时是否需要应用多线程逻辑?如果是这样
我应该在哪一点创建线程?

最佳答案

通常,每个套接字使用一个线程。并且,如果您接受连接,则循环中的线程将阻塞,等待传入的连接套接字。然后,您创建一个新线程,并将此套接字句柄传递给要处理的新线程。关闭并完成该连接后,只需让该线程终止(或加入)即可。这是线程服务器的基础。

用伪代码...

loop {
socket = accept();
new ThreadHandler( socket )
}

使用单个线程来处理多个套接字非常棘手,主要是因为线程在写(或更经常地,从套接字读取)时会阻塞(停止,等待)。不是为胆小的人准备的。

关于sockets - Winsock API是否自动多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com