我正在用python编写套接字编程。我有点困惑于s.listen(5)和多线程的概念。
据我所知,使用s.listen(5)是为了使服务器能够监听多达5个客户端。
此外,还使用多线程技术,使服务器能够连接到许多客户端。
请解释一下我们在哪种情况下使用多线程?
提前感谢
发布于 2018-12-21 09:43:46
您需要使用多线程来处理多个客户端。当您接受连接时,您将收到一个新的套接字实例,该实例表示与该新客户端的连接。现在假设您正在进行聊天,并且需要从一个客户端接收数据并将其发送到所有连接的客户端,如果您不使用多线程,则需要使用单个进程循环实现non-performatic逻辑,以遍历读取每个进程的连接客户端,并最终将数据发送给他们,但您将遇到另一个问题,因为侦听函数会创建一个IO中断,该中断将等待一个新客户端尝试连接,如果您不使用非块套接字的话。这都是关于架构、性能和良好实践的。
很好地阅读了有关多线程的内容,请遵循这个链接https://techdifferences.com/difference-between-multiprocessing-and-multithreading.html。
发布于 2018-12-21 15:43:54
据我所知,使用s.listen(5)是为了使服务器能够监听多达5个客户端。
不是的。s.listen(5)
声明了一个大小为5的待办事项。这意味着侦听套接字将允许5个连接请求在未被接受之前处于待定状态。每当连接请求被接受时,它就不再存在于挂起的待办事项中。因此,对于接受的连接数量没有限制(服务器资源除外)。
多线程的一种常见用法是在接受连接以处理该连接之后启动一个新线程。另一种方法是在单个线程上使用select
来处理同一线程中的所有连接。在多线程变得普遍之前,它曾经是一种规则,但是它会导致更复杂的程序。
https://stackoverflow.com/questions/53880028
复制相似问题