针对clientserver mod的Python套接字支持/线程

2024-04-19 09:42:34 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我试图编写一个非常简单的客户机-服务器系统,在UDP上进行一些拥塞控制。简单地说,服务器发送数据包并从客户端接收反馈包。我对这一点相当陌生,不确定:

(1)同一个插座可以连接多少个用户?在

(2)多个用户可以同时使用一个套接字吗(又称并行读/写)?在

(3)我需要使用线程,以便对每个用户,我可以向他们发送数据包,并接收来自他们的反馈数据包。我在另一篇文章中读到,不应该为每个用户打开线程(我为每个用户打开两个线程)。我这样做有错吗?我有内在的误解吗?有人对如何处理这个问题有什么建议吗?在

对不起,我对这个很陌生。在


Tags: 用户服务器客户端客户机系统文章数据包线程
2条回答

(1)到套接字的连接数受操作系统的限制,但可以达到100k甚至更多—检查C10K问题

(2)一个套接字可以由多个线程甚至多个进程使用pre-fork方法

(3)您可以为每个连接使用一个新的线程,但最好的方法是使用线程池,或者您可以使用异步方法并避免使用线程

根据^{}的文件:

Listen for connections made to the socket. The backlog argument specifies the maximum number of queued connections and should be at least 0; the maximum value is system-dependent (usually 5), the minimum value is forced to 0.

所以从技术上讲,请求不是并行处理的,而是排队的,直到通常的最大值为5。我不知道你提到的文章的作者为什么要声明你不应该为每个用户启动一个线程,但是我读到大多数服务器对每个请求使用一个线程。此外,线程池是一种通用模式,使用Queue这样的同步对象可以很容易地实现它(this example如果您希望看到一个小的实现,可能会很有用)。在

相关问题 更多 >