どうも、俺@仕事中です。
socket.ioのv0.7.xが出てたという噂を聞きつけて早速
# npm update socket.io
しちゃったら、途端にnodeアプリが動作しなくなっちゃいました。
そこで、socket.ioのv0.7.xの仕様変更、特にメッセージ送受信部分について簡単にめもめもします。
まぁ、、
socket.io : github : Migrating 0.6 to 0.7からの引用です。
※express上で動作させているものとします。
■ソケットの生成
・サーバ側
var io = require("socket.io").listen(app);
io.sockets.on('connection', function(socket) {
console.log('接続されました');
});
・クライアント側
var socket = io.connect('http://node.server.com:3000');
すでにv0.6.xと実装が異なります。
■メッセージ送受信
・サーバ側
io.sockets.on('connection', function(socket) {
socket.on('message', function(data) {
// 受信処理
});
});
・クライアント側
var socket = io.connect('http://node.server.com:3000');
socket.send(data);
// または
socket.json.send(data, [callback]);
v0.7.xからは socket.json.send() により明示的にJSONへ変換するように指定できるようになりました。(省略可)
それ以前は自動的にJSONへ変換がかかっていたので、それを変換する/しないが指定できるようになった形です。
callbackでは、送信後の処理を記述できます。(送達確認処理)
■メッセージ送受信(カスタムイベント)
v0.7.xからはメッセージやり取りに開発者の指定するカスタムイベントによって送受信できるようになりました。
・サーバ側
socket.on('custom event', function(data) {
// custom eventを受け取ったときの処理
});
・クライアント側
socket.emit(custom event, data, [callback]);
■サーバからのメッセージ送信
・サーバ側
// 自分自身へ送る
socket.emit('custom response', data);
// 自分以外全員へ送る
socket.broadcast.emit('custom response', data);
// 自分を含む全員へ送る
io.sockets.emit('custom response', data);
ちなみにこれらemit()でサーバから送られたデータをクライアント側で受け取る場合は、第1引数に指定されたイベント名でなければ受信できません。
・クライアント側
socket.on('custom response', function(data) {
// 受け取ったときの処理
});
v0.6.xのようにクライアント側で
socket.on('message', function(data) {
});
で受け取る場合は、サーバ側の送信部分は
socket.send(data);
socket.broadcast.send(data);
io.sockets.send(data);
のように記述すればOKです。
また特定のソケットセッションに対し送信することもできるようになりました。
・サーバ側
io.sockets.socket(<session id>).send(data);
io.sockets.socket(<session id>).emit('custom response', data);
<session id>は任意のセッションIDです。
セッションIDはv0.6.xまではsocket.sessionIdで取得していましたが、v0.7.xからはsocket.idで取得できるようになりました。
以上でぇぇぇぇぇす。