2017-02-25 3 views

答えて

2

io.emit(msg, data)は、そのサーバーに接続されているすべてのクライアントに送信されます。クライアントがそれを聞いているかどうかは関係ありませんmsg。データはクライアントに送信され、クライアントにそのクライアントのリスナーがある場合は、msgのイベントリスナーが呼び出されます。

クライアントにそのメッセージのリスナーがない場合、メッセージは到着しますがリスナーはありません。その時点で、リスナーのないイベントと同じです。イベントは発生しますが、リスナーがない場合、コールバックキューは空です。したがって、呼び出すイベントハンドラはありません。

2つの図の意図した違いはよく分かりませんが、最初の図はdataが3つのクライアントすべてに送信されていることを正しく示しています。 2番目の図はそれを示していないので、正しくありません。

送信されるデータだけではないことに注意してください。 msg名もデータとともに送信されます。これは受信側のクライアントがイベントハンドラがどのトリガをトリガするかを知る方法です。


このようなクライアントを考えることができます。

  1. ここに受信メッセージがあります。
  2. そのメッセージのリスナーはありますか?
  3. その場合は、リスナーを呼び出します。
  4. そうでない場合は、メッセージを無視してください。

    io.emit()が接続されているすべてのクライアントに送信します

  5. サーバー側で

、あなたはそれがに行く人を決定するメッセージを送信する方法についての選択肢があります。

socket.emit()は、特定のクライアントソケットにのみ送信されます。

socket.broadcast.emit()は、socketで表されるものを除くすべての接続されたクライアントに送信されます。

socket.to(room).emit()がその部屋のクライアントに送信されます。

io.of('chat').emit()は、その名前空間に接続されたクライアントに送信します。

+0

@Efkan - これはあなたの質問に答えましたか? – jfriend00

+0

ありがとうございます。この答えは、私が探しているものです。だから、私は答えを受け入れました。素晴らしい週末を過ごしましょう! – efkan

1

第一の方法は、より正確です。どのようにsocket.ioが動作するのかは、すべてのクライアントが関連するイベントを待ち受けていることです。ある人が「通過」すると、そのようなデータ形式を取ります。ここ

はsocket.ioの上に簡単な例である:

セットアップ:

クライアントA: socket.on('attendance', data)
クライアントB: socket.on('leaving', data)
クライアントC: socket.on('attendance', data)

例シナリオ:

サーバー: io.emit('attendance', data)
クライアントA: if 'attendance' == 'attendance' //true; do something with data
クライアントB: if 'attendance' == 'leaving' //false; do nothing
クライアントC: if 'attendance' == 'attendance' //true; do something with data

は、この情報がお役に立てば幸い!

+0

タンクス。あなたの答えも真です。私は他のものを受け入れた。しかし私はこの人にも評判(+10)を与えました。 – efkan

+0

ありがとう、嬉しいです。 – pudility

関連する問題