我正在嘗試構建一個處理多個客戶端的聊天服務器。我正在嘗試在新線程上處理每個連接的客戶端。問題是,我對如何將從客戶端收到的消息轉發給預期的接收者感到困惑。我的意思是client-1到client-5。我對套接字編程非常陌生。因此,任何形式的幫助表示讚賞。Python:多客戶端線程聊天服務器
0
A
回答
1
這是您的服務器的僞設計。我會用編程語言不可知的術語說話。
有一個「全局散列表」,它將「客戶端ID號」映射到相應的「套接字」(以及任何其他客戶端數據)。任何對這個哈希表的訪問都有一個互斥量來保護。
每當你接受一個新的連接時,啓動一個線程。我假設您的聊天協議中有一些內容是客戶端標識自己,獲取客戶端ID號並分配給會話的。線程所做的第一件事是將此客戶端連接的套接字添加到散列表。每當有消息進入(例如,從客戶端1到客戶端5)時,在哈希表中查找「客戶端5」以獲取其套接字。轉發此套接字上的消息。
有幾種競爭條件可以解決,但這應該是一個足夠體面的設計。
當然,如果你真的想擴展,你不會做「每線程線程」方法。但是,如果您僅限於同時連接的大約100個或更少的客戶端,則無問題。之後,您應該考慮使用非阻塞I/O的單線程方法。
相關問題
- 1. 客戶端 - 服務器聊天Twisted,Python
- 2. 多線程多客戶端聊天服務器
- 3. Java多客戶端聊天服務器
- 4. UDP多客戶端聊天服務器
- 5. vb.net多線程聊天客戶端和服務器
- 6. 多線程客戶端 - 服務器聊天,使用套接字
- 7. 聊天服務器 - 客戶端/服務器聊天Java作業
- 8. 客戶端 - 服務器在Lua聊天
- 9. 同步:客戶端,服務器聊天
- 10. 聊天客戶端服務器C++
- 11. 客戶端服務器聊天
- 12. Java聊天客戶端和服務器
- 13. (聊天)服務器和客戶端
- 14. 服務器/客戶端聊天
- 15. C++服務器客戶端聊天
- 16. 聊天服務器客戶端輸出
- 17. Java客戶端/服務器聊天
- 18. Java聊天服務器客戶端
- 19. java中的多線程客戶端服務器聊天應用程序
- 20. 多線程服務器/客戶端聊天應用程序中的ConcurrentModificationException
- 21. 在C#中創建客戶端/服務器聊天客戶端
- 22. 具有多線程服務器(TCP/IP)的客戶機/服務器聊天室
- 23. 服務器端客戶端聊天程序
- 24. python聊天客戶端庫
- 25. Socket編程客戶端服務器聊天應用程序C++
- 26. Python聊天客戶端 - 服務器修改出錯可怕
- 27. 多線程聊天服務器
- 28. 客戶端 - 服務器多線程
- 29. Java多線程服務器客戶端
- 30. 多線程客戶端服務器
從這裏開始:http://twistedmatrix.com –
不能沒有扭曲呢?我真的很想了解實施它的想法。 –
閱讀beej的網絡編程指南。它在C中,但Python只是包裝這個相同的API。 –