Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?

socket.io のやりとりの仕組み

socket.emit(eventname, data) イベントの発火(=データの送信)
socket.on(eventname, data) イベントの検知(=データの受信)
  • eventnameはクライアントサイド、サーバーサイドで一緒であれば任意の文字列を指定可能
  • broadcast は socket.broadcast.emit とすることで実行できる
サーバーサイド
var io = require('socket.io').listen(app);

io.sockets.on('connection', function (socket) { // 2
  log('connected');
  socket.on('msg send', function (msg) { // 4
    io.sockets.emit('msg push', msg); // 5
  });
  socket.on('disconnect', function() { // 7
    log('disconnected');
  });
});
クライアントサイド
var socket = io.connect('http://localhost'); // 1

socket.on('connect', function() { // 2
  log('connected');
  socket.emit('msg send', 'data'); // 3
  socket.on('msg push', function (msg) { // 6
  });
});
  1. クライアントが 'http://localhost' にソケット接続を要求
  2. サーバがクライアントとの接続を確立すると、サーバで 'connection' 、クライアントで 'connect' イベントが発生
  3. クライアントが 'msg send' イベントを発火して文字列 'data' を送信
  4. サーバで 'msg send' イベントが発生し、コールバックが実行される
  5. サーバが 'msg push' イベントを発火して受信したメッセージを送ってきた本人とそれ以外のクライアントに送信
  6. クライアントで 'msg push' イベントが発生し、コールバックが実行される
  7. クライアントが切断したら、サーバ側で 'disconnect' イベントが発生
  • 5 の io.sockets.emit(eventname, data) は、socket.emit(eventname, data) (メッセージを送ってきた本人に送り返す)と socket.broadcast.emit(eventname, data) (メッセージを送ってきた本人以外にブロードキャスト)の両方を実行している。
@stoshiya

This comment has been minimized.

Copy link

@stoshiya stoshiya commented May 2, 2014

eventnameには予約語がありますので,調べてみましょう.

クライアントサイドとサーバサイドで同じイベント名を使うので,pushやsendといった送受信を表現する言葉は混乱を招きます.送受信するするデータの名称をつかうほうが理解しやすいと思います.

シンタックスハイライトするとソースコードが少し見やすくなります

var socket = io.connect('http://localhost'); // 1

socket.on('connect', function() { // 2
  log('connected');
  socket.emit('msg send', 'data'); // 3
  socket.on('msg push', function (msg) { // 6
  });
});
@tokunami

This comment has been minimized.

Copy link
Owner Author

@tokunami tokunami commented May 7, 2014

予約語

調べてみました。
変数名や関数名として定義できない単語

  • break
  • case
  • catch
  • continue
  • debugger
  • default
  • delete
  • do
  • else
  • false
  • finally
  • for
  • function
  • if
  • in
  • instanceof
  • new
  • null
  • return
  • switch
  • this
  • throw
  • true
  • try
  • typeof
  • var
  • void
  • while
  • with
@stoshiya

This comment has been minimized.

Copy link

@stoshiya stoshiya commented May 7, 2014

これはJavaScriptの予約語ですね.https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Reserved_Words

socket.ioのイベント名の予約語とは別なので,もう一度調べてみましょう.

@tokunami

This comment has been minimized.

Copy link
Owner Author

@tokunami tokunami commented May 8, 2014

reserved event name (socket.io)

見つけました!

  • message
  • connect
  • disconnect
  • open
  • close
  • error
  • retry
  • reconnect
@stoshiya

This comment has been minimized.

Copy link

@stoshiya stoshiya commented May 8, 2014

だいたいokです.サーバは3つで,クライアントには9つくらいあります.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.