|
|
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
});
});
- クライアントが 'http://localhost' にソケット接続を要求
- サーバがクライアントとの接続を確立すると、サーバで 'connection' 、クライアントで 'connect' イベントが発生
- クライアントが 'msg send' イベントを発火して文字列 'data' を送信
- サーバで 'msg send' イベントが発生し、コールバックが実行される
- サーバが 'msg push' イベントを発火して受信したメッセージを送ってきた本人とそれ以外のクライアントに送信
- クライアントで 'msg push' イベントが発生し、コールバックが実行される
- クライアントが切断したら、サーバ側で 'disconnect' イベントが発生
- 5 の
io.sockets.emit(eventname, data)
は、socket.emit(eventname, data)
(メッセージを送ってきた本人に送り返す)と socket.broadcast.emit(eventname, data)
(メッセージを送ってきた本人以外にブロードキャスト)の両方を実行している。
eventname
には予約語がありますので,調べてみましょう.クライアントサイドとサーバサイドで同じイベント名を使うので,pushやsendといった送受信を表現する言葉は混乱を招きます.送受信するするデータの名称をつかうほうが理解しやすいと思います.
シンタックスハイライトするとソースコードが少し見やすくなります