2016-03-25 5 views
3

私はこれを調べるのに数時間を費やしました。私は決定的な答えを見つけることができませんでしたので、質問を作成しています。私はWebSocketにはまったく新しいので、回答がどこかで簡単に利用できるなら、高度な謝罪をする。放出されたイベントは、監視されていなくても重大な負荷を発生させますか?

現在、node.jsサーバーにsocket.ioを介していくつかの異なるwebsocketイベントが送信されています。サーバコードの異なる部分を通して、私はそれゆえような行があります:私は二つの異なるタイプがあり

io.sockets.emit('eventTwo', data); 

io.sockets.emit('eventOne', data); 

をのは、コードの他の部分には、また、行が含まれていることを言ってみましょうサーバーに接続するクライアント。クライアントの一つのタイプは、唯一のためのような線を有する、最初のイベントに耳を傾ける:

socket.on('eventOne', function(data) {//blah blah}): 

クライアントの他のクラスは、他のイベントに耳を傾け、ひいてはなどの実行の行があります。

socket.on('eventTwo', function(data) {//blah blah}); 

を両方のクライアントは、部屋のないルートレベルで接続されています。たとえば、最初のグループのクライアントを見ると、「eventOne」イベントだけが監視されるため、このクライアントグループが「eventTwo」イベントのすべてのデータを受け取るかどうか、それらを聞いてはいけません。 クライアントには、すべてのイベントの完全なネットワーク負荷、またはB:視聴しているイベントのみが表示されますか?(またはC:視聴しているイベントの全負荷と、監視していないイベントの部分負荷のみ)

クライアント側のコードがすべてのイベントを監視していなくても、サーバーからのイベントはwebsocketを介して送信され、両方のタイプのクライアントはそれぞれ両方のタイプのイベントに対してネットワーク負荷を受けます。しかし、私の一部は、socket.ioコードが、イベントの内容を判断した後に見ていないイベントに対してペイロード全体を受信することを拒否することによって、クライアントのネットワーク負荷を軽減する可能性があると考えています。

はい、この例では、クライアントの2つのタイプが別の部屋に参加する必要がありますが、私はちょうどよりよいイベントを監視することは洞察力のために、事前にネットワーク負荷に

感謝をどのように影響するかを理解したかったです!

答えて

3

クライアントにはすべてのイベントのネットワーク負荷がありますか? B:視聴しているイベントのみですか?

クライアントが特定のイベントをリッスンしているかどうかはサーバーには分かりません。したがって、サーバーコードがすべてのクライアントにイベントを送信するように指示すると、クライアントはそのイベントをリスンしているかどうかにかかわらず、すべてのクライアントにイベントを送信します。だから、上記の質問への答えは、A - それに送られたすべてのイベントの完全なネットワーク負荷です。

しかし、私の一部はsocket.ioコードは、イベント が何であるかを判断した後、彼らは見ていない イベントのために全体のペイロードを受け取ることを拒否して、クライアントのための ネットワークの負荷を減らすかもしれないと考えています。

いいえ、TCPとsocket.ioはそのようには動作しません。メッセージ全体が1つの単位として送信されます。メッセージの一部をキャンセルする機能はありません。ペイロードは、複数のメッセージに分割しなければならず、クライアントがそれを返信してサーバーに通知したり、それ以上のメッセージを望まないことがあります。それは設計することができますが、デフォルトではそうではありません。


あなたがクライアントの二つのクラス、メッセージの異なるクラスに興味を持っていることをそれぞれが持っている場合、あなたはおそらく、それが受信したいものと一致する特定の「部屋」に与えられたクライアントを置く必要があります。サーバがどのクライアントがどれであるかを知っている場合、クライアントは知っているとすぐに適切な部屋にクライアントを置くことができます。クライアントだけが知っている場合、クライアントはサーバーにメッセージを送信して、特定の「ルーム」に配置を要求できます。サーバー上で使用したい "部屋"の名前は、単にクライアントの集合であり、実際の名前は関係ありません。

次に、サーバーは適切な部屋にメッセージをブロードキャストでき、その部屋にいるように依頼したクライアントだけがそれらのメッセージを取得します。こうすることで、興味のないクライアントにメッセージを送信することはありません。

チャットルームのようなものです。各クライアントは、必要な通知/メッセージの種類を含むチャットルームに入ります。必要に応じて複数の部屋に入れることができます。これはsocket.ioに組み込まれた非常に便利な機能です。チャットの目的で最初に書かれた可能性は高いですが、通知のクラスでもうまく機能します。

+1

ああ、そうです。説明に1トンありがとう! – IlIIlllIIIlIIlllIlIllIIIlIlI

関連する問題