我刚开始学习套接字和客户端/服务器。我不清楚以下概念。假设非阻塞套接字。
假设我有一个服务器应用程序,我有1000个客户试图与它交谈,我认为这是非常现实的。假设客户端和服务器通过套接字进行通信。 1-这是否意味着每个客户端都有一个单独的套接字连接? (我们有1000个插座,还是一个有1000个连接的插座?
2-每个套接字连接都属于一个单独的线程吗?如果是,我们如何限制线程数量,因为它可能会失控?
答案 0 :(得分:1)
假设您正在使用TCP,那么每个连接都在一个单独的套接字上。操作系统使用文件描述符分配它们。
当使用像UDP这样的协议时,情况并非必须如此,除非你编写代码才能实现这一点。
线程?这取决于您如何构建服务器。根本不需要线程成为服务器的一部分,你可以(显然)只有一个连接就有多个线程。但是,一种常见的做法是, 将accept()
返回的套接字交给新线程,是的。
如果您对线程没有兴趣 - 例如,如果服务器只执行非常快速的任务并且创建线程只是浪费时间 - 您可以使用select()
轮询套接字并确定哪些需要注意。有些服务器使用线程和轮询的组合来尝试最大化吞吐量。