2013-06-03 24 views
7

竜巻WebSocketチャットの例では、参加者はセット(link)に格納されているため、単一のサーバーの場合に便利です。しかし、ロードバランサとしてアプリケーションとnginxの複数のインスタンスを実行する場合、どのようにこの場合、より良い参加者を格納するには?竜巻のスケーラビリティwebsocket chat

+0

複数のインスタンスを実行しても差はありません。結局、すべてのインスタンスはそれ自身のset()を持ちます。インスタンス間でユーザーを切り替えるロードバランサについて心配するなら、チャット中は動作しないと思うが、間違っているかもしれない。小さなデータベースやキーバリューストアと考えるかもしれない同じユーザーリストをすべてのインスタンスで使用することをお勧めしません。 – pypat

+0

私はそれを理解しているので、各インスタンスは参加者だけに接続を維持し、異なるインスタンスは異なるユーザーリストを持つことになります。しかし、チャットの新しいメッセージが他のインスタンスにどのように通知されますか?彼は – saniaxxx26

+0

'set'は一つのpythonインスタンスにしか属しておらず、他のインスタンスからアクセスすることができないので、前述の@pypatのように、すべてのインスタンスからアクセスできる共通のFASTキー値ストアを作成する必要があります(Memcached 、Redisなど)。 1つの方法は、Redis Pub/Subシステムを使用して、更新された情報のすべてのインスタンスに通知することです。私の答えが少し助けてくれることを願っています。 –

答えて

4

Redisのpubsub機能の使用を検討することがあります。 (link

は編集:あなたの顧客があなたのチャットルームにログオン

は、彼らがチャネルへsubscribeは、chatroomを言うことができます。どの竜巻のインスタンスを使用しているかは関係ありません。 this moduleを使用すると、チャネルを非同期で聞き続けることができます。

他のクライアントがチャットルームにメッセージを送信した場合(チャンネルchatroomにメッセージを公開した場合)、すべての竜巻インスタンスはチャンネルに登録したユーザーにメッセージを自動的に送信します。その後、websocket経由でメッセージを送信することができます。

例として、demoをご覧ください。

関連する問題