1

因此,我正在尝试编写一个非常简单的客户端-服务器系统,该系统对 UDP 进行一些拥塞控制。简单地说,服务器发送数据包并从客户端接收反馈包。我对此很陌生,不确定:

(1) 同一个socket可以连接多少个用户?

(2) 多个用户可以同时使用一个套接字(也就是并行读/写)?

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

对不起,我对此很陌生。

4

2 回答 2

2

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

(2) 一个socket可以被多个线程甚至多个进程使用pre-fork方式

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

于 2013-03-29T01:01:12.697 回答
1

根据以下文件socket.listen()

监听到套接字的连接。backlog 参数指定排队连接的最大数量,应至少为 0;最大值取决于系统(通常为 5),最小值强制为 0。

所以从技术上讲,请求不是并行处理而是排队处理,直到通常最多 5 个。我不知道你提到的帖子的作者必须声明你不应该为每个用户启动一个线程的原因,但我已经读到大多数服务器每个请求使用一个线程。线程池也是一种常见的模式,它可以很容易地使用同步对象来实现Queue(如果你想看到一个小的实现,这个例子可能很有用)。

于 2013-03-29T01:38:43.730 回答