-1


我有一些 python 应用程序是聊天服务器。它有多个房间,一个客户端可以连接到一个房间。所以我有班级房间和班级客户。客户端具有 on_open()、on_message() 和 on_close() 等事件以及 send() 函数。收到消息后,我需要将其发送给房间里的其他客户并将其发布到我的消息队列中。这是我的问题。不知道在哪个班做什么。
应该在 Room 类还是在 Client 类中发布到队列?
我应该在哪里向其他客户端广播消息,在 Client 类还是在 Room 类?
或者,也许我应该将所有事件从 Client 类上层传递到 Room 类?

4

2 回答 2

1

也许你应该让队列管理它自己的关注点,让它监听它需要记录的事件,而不是让它从属于其他任何一个类。

您可能想阅读观察者模式(http://code.activestate.com/recipes/131499-observer-pattern/http://philipuren.com/serendipity/index.php?/archives/4-guid .html)。它专为许多不同类可能想要响应某些状态更改(在您的示例中为传入消息)的情况而设计。在这种情况下,您的 Client 类将是“主题” - 它会保留一个类列表,当类似 on_open() 发生时,它会关心并让他们知道发生了某些事情;观察者(在这种情况下,我建议使用队列)自行决定如何处理这些信息。这增强了未来的灵活性,因为如果您想要添加新功能(例如创建桌面通知或在消息进来时播放声音),则无需更改现有类。

此示例使用装饰器实现 Observer,让您了解使用此策略可以赢得多少未来的灵活性:http ://reader1000.tumblr.com/post/20361533339/observer-pattern-with-python-decorators

于 2013-03-11T23:15:42.400 回答
0

恕我直言,队列应该在房间里,因为每个客户端都不负责队列,但是为了让客户端看到消息,他们应该能够看到队列。

于 2013-03-11T22:48:04.687 回答