1

我想解释一些与套接字有关的事情...... 假设我为聊天创建了一个套接字(服务器和客户端),此套接字的每个客户端都将接收来自服务器的数据并发送数据到服务器,它将同时向所有客户端发送数据。服务器如何同时接受所有连接? 我知道,与模块“套接字”有3个方法:套接字Python选择和多处理

  1. 创建更多的线程与模块“线程”,但它是不是最好的办法
  2. 创建模块的详细过程多处理
  3. 使用模块选择

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

回答

1

只是基于我在套接字编程方面的经验非常有限。

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

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

使用select有没有不必担心多线程/进程的编程,使用OS通知的文件描述符变化的优势,允许单个线程来处理数百或数千个或数以万计的开放式套接字。

线程是处理io的好方法。因为线程不会被cpu绑定,所以通常可以接受和执行许多io绑定线程。由于线程将花费大部分时间在IO上等待,因此应该不会有太多开销。

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

有很多很多的例子,博客和聊天服务器的教程,高性能蟒蛇Web服务器和套接字编程python中对谷歌