-1


チャットサーバーであるPythonアプリケーションがいくつかあります。複数の部屋があり、1つのクライアントを1つの部屋に接続できます。だから私はクラスルームとクラスクライアントを持っています。クライアントには、on_open()、on_message()、on_close()などのイベントがあり、send()関数もあります。メッセージを受信したら、それを部屋の他のクライアントに送信して、メッセージキューに投稿する必要があります。これが私の問題です。どのクラスで何をするのかわかりません。
キューへの投稿は、RoomクラスまたはClientクラスで行う必要がありますか?
クライアントクラスまたはルームクラスのどこで他のクライアントにメッセージをブロードキャストする必要がありますか?
または、クライアントクラスの上位クラスからルームクラスにすべてのイベントを渡す必要がありますか?

4

2 に答える 2

1

おそらく、キューにそれ自体の懸念を管理させ、他のクラスのいずれかに従属させるのではなく、記録する必要のあるイベントをキューにリッスンさせる必要があります。

オブザーバーパターン( http://code.activestate.com/recipes/131499-observer-pattern/ およびhttp://philipuren.com/serendipity/index.php?/archives/4-guid )を確認することをお勧めします.html)。これは、多くの異なるクラスが何らかの状態変化(この例では着信メッセージ)に応答する可能性がある状況向けに設計されています。この場合、Clientクラスは「Subject」になります。on_open()のようなものが発生したときにそれを処理するクラスのリストを保持し、何かが発生したことを通知します。オブザーバー(この場合、私はキューを提案しています)は、自分でその情報をどう処理するかを決定します。これにより、デスクトップ通知の作成やメッセージの受信時のサウンドの再生などの新しい機能を追加する場合に既存のクラスを変更する必要がないため、将来の柔軟性が向上します。

デコレータを使用してObserverを実装するこの例では、この戦略で将来どの程度の柔軟性を獲得できるかがわかります。http: //reader1000.tumblr.com/post/20361533339/observer-pattern-with-python-decorators

于 2013-03-11T23:15:42.400 に答える
0

IMHO各クライアントはキューを担当していないため、キューは部屋にある必要がありますが、クライアントがメッセージを見るためには、キューを見ることができる必要があります。

于 2013-03-11T22:48:04.687 に答える