我有一些python應用程序是聊天服務器。它有多個房間,一個客戶可以連接到一個房間。所以我有班級和班級客戶。客戶端具有諸如on_open(),on_message()和on_close()以及send()函數的事件。收到消息後,我需要將其發送給其他客戶,並將其發佈到我的消息隊列中。這是我的問題。我不知道在哪個班級做什麼。
應該在Room類還是在Client類中發佈到隊列?
我應該在哪裏向其他客戶,客戶類或房間類中廣播消息?
或者我應該將所有事件從客戶端類上傳到Room類?Python類的層次結構和設計問題
-1
A
回答
1
也許你應該讓隊列管理自己的顧慮,讓它監聽它需要記錄的事件,而不是將它服從於任何其他類。
您可能想要了解觀察者模式(http://code.activestate.com/recipes/131499-observer-pattern/和http://philipuren.com/serendipity/index.php?/archives/4-guid.html)。它適用於許多不同類別可能需要響應某些狀態更改的情況(在您的示例中爲傳入消息)。在這種情況下,您的客戶端類將是'主題' - 它會保留一些類似on_open()的類時關心的類的列表,並讓它們知道發生了某些事情;觀察者(在這種情況下,我建議隊列)決定如何處理這些信息。這增強了未來的靈活性,因爲如果您想添加新功能(如創建桌面通知或在消息進入時播放聲音),則無需更改現有類。
此示例使用Observer裝飾者,給你一個想法,你可以贏得多少未來的靈活性,這種策略:http://reader1000.tumblr.com/post/20361533339/observer-pattern-with-python-decorators
0
恕我直言,隊列應該在房間裏,因爲每個客戶端不負責隊列,但爲了讓客戶端看到消息,他們應該能夠看到隊列。
相關問題
- 1. 如何設計類層次結構
- 2. 設計一個類層次結構
- 3. 計算Python包中的類和類層次結構的數量
- 4. 類繼承層次的設計問題
- 5. 設計面向對象層次結構時的問題
- 6. 類層次結構和設置
- 7. Automapper和類層次結構
- 8. 設計良好的類和層次結構
- 9. 有關動態子類層次結構處理設計的問題
- 10. PHP類層次結構 - 層次結構中的最高類
- 11. 類層次結構
- 12. 類層次結構
- 13. 父類和子類的層次結構
- 14. 類層次結構設計 - 接口+基類與抽象類
- 15. 多態層次結構DB設計
- 16. Perl/Moose OO設計,包層次結構
- 17. 的Git分支層次結構問題
- 18. 在Python中擴展類層次結構
- 19. Python:連載類層次結構
- 20. NSObject的類層次結構
- 21. 計算層次結構列
- 22. ImagePicker在視圖層次結構問題
- 23. React事件層次結構問題
- 24. Zend_Navigation層次結構問題與主頁
- 25. 樹形層次結構問題
- 26. Java異常層次結構問題
- 27. Ultragrid/Winforms網格層次結構問題
- 28. Spring Security角色層次結構問題
- 29. 調用層次結構問題
- 30. 設計具有層次結構/子類別的SQL表
感謝您的回答。但是客戶端不需要查看隊列,因爲隊列是用於歸檔目的並由另一個進程完成的。 – connexion20000 2013-03-11 22:57:56
沒有消息隊列所有其他客戶端如何看到消息? 我唯一的想法是:每次房間發送一條消息都會向每個客戶端發送一條消息,但這看起來很麻煩。 – david 2013-03-11 23:03:07
這就是現在的做法。客戶端可以接收事件並將消息傳遞給房間。 – connexion20000 2013-03-11 23:07:38