2010-12-11 14 views
2

ユーザーがチャットルームを開くことができるサイトがあるとします。部屋が開かれると、ユーザは他の人を招待し、チャットすることができる。WebSocketサーバーのベストプラクティスは何ですか?

また、クライアントとの通信にWebSocketを使用したいと考えています。 ほとんどのサーバー側のWebSocket実装では、ブロードキャストを開始したホストではなく、接続されているすべてのホストにメッセージを送信する、connection.broadcast(message)のような単純な機能があります。これは素晴らしい機能です。なぜなら、自分のためにすべてのクライアントのリストを保持して更新する必要がないからです。チャットルームの例の問題は、この場合、すべてのメッセージを全員にブロードキャストするのではなく、同じ部屋にいる他のクライアントにのみブロードキャストすることです。

これは、2つのオプションが私の葉:

  • 順番にすべてのクライアントと部屋を追跡することを意味し、私自身broadcastToRoom(room_id)機能を、ロールバックします。
  • 新しい部屋が作成されるたびに、(新しいポートに)サーバーの新しいインスタンスを生成します。

あなたはどうしますか?

+0

私はすぐに離れて、各部屋に新しいサーバを産卵から敬遠したい - ではない完全なHTTPサーバが資源の浪費、ために設計されたものを、あなたのポートはすぐになりますあなたがその方向で何かを拡張することを決めたら、部屋間でデータをやりとりするのがもっと難しくなります –

答えて

5

あなたはその部屋のユーザーのリストを保持している各部屋に自分のバージョンのbroadcastを貼り付けるだけで、誰かがその部屋に/からメッセージを送信すると、あなたの部屋に応じてプロトコルを使用すると、メッセージの元の送信者を除外できます。

あなたはどの部屋にもユーザーのリストがあります。そのため、接続をプロパティとしてユーザーオブジェクトに追加することができます。

最新のWebSocket仕様で最近発見されたセキュリティの問題により、OperaとMozillaの両方で、新しいバージョンが発行されるまでWebSocketのサポートが無効になっていることに注意してください。したがって、WebSocketの可用性が広がり、サーバーを新しいバージョンに変更する必要があります。詳細について

は、以下を参照してください。
http://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/
http://blog.pusherapp.com/2010/12/9/it-s-not-websockets-it-s-your-broken-proxy

+0

2017更新:私はMozillaが今サポートしていると信じています。 – vapurrmaid

関連する問題