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中對谷歌