Socket Python选择和多处理



我想要一些解释与套接字有关的事情…假设我创建了一个用于聊天的套接字(服务器和客户端),该套接字的每个客户端将从服务器接收数据并向服务器发送数据,服务器将同时向所有客户端发送数据。服务器如何同时接受所有的连接?我知道模块"socket"有3个方法:

  1. 创建更多的线程与模块"threading",但这不是最好的方式
  2. 使用multiprocessing模块创建更多进程使用模块select

最好的方法是什么?使用select和使用multiprocessing有什么区别?

根据我非常有限的套接字编程经验给出一些概括。

它们是处理IO的两种完全不同的方式。

select通常用于实现非阻塞IO,通常在单个线程中。Tornado是一个成熟的框架例子。http://www.tornadoweb.org/en/stable/, Tornado使用select(或内部等价)

使用select的优点是不必担心多线程/进程编程,使用os通知文件描述符的更改允许单个线程处理数百或数千或数万个打开的套接字。

线程也是处理io的好方法。由于线程不受cpu限制,因此生成许多io绑定线程通常是可以接受的,而且性能也很好。由于线程将花费大部分时间等待IO,所以*不应该有太多的开销。

我将def看龙卷风,因为它有一个聊天的例子,是微不足道的创建

在google

上有很多关于聊天服务器、高性能python web服务器和python套接字编程的例子、博客和教程。

相关内容

  • 没有找到相关文章

最新更新