iocatでSocket.IOのサーバをデバッグする
Socket.IOで立てたWebSocketサーバをiocatコマンドでデバッグする方法について。
iocatとiocat内部で使うsocket.io-clientをグローバルにインストールする。
$ npm install -g iocat socket.io-client
適当なSocket.IOサーバを書く。
var io = require('socket.io')(3000);
io.on('connection', function(socket) {
log('connection');
socket.on('open', function() {
console.log('open');
console.log(arguments);
});
socket.on('message', function() {
console.log('message');
console.log(arguments);
});
socket.on('disconnect', function() {
console.log('disconnect');
});
});
サーバはDEBUG環境変数を付けて起動するといろいろな情報が見れるので良い。
$ DEBUG=* node server.js
iocatでサーバに接続する。Socket.IOのサーバに接続するので、--socketio
が必要。
$ iocat -v --socketio ws://127.0.0.1:3000
> SIOClient> SIOClient: url-> ws://127.0.0.1:3000
SIOClient> onConnect
iocatからメッセージを送ってみる。接続直後はプロンプトに>
が表示されない。
> message
SIOClient> send message
サーバ側にはconsole.log
で出力したログ(と、その他DEBUGで指定したログ)が表示されているはず。
message
{ '0' : 'message' }
ただ、iocatでは送信できるものがmessage
固定となっているらしく、上のコードでのopen
は送れない。(自分がmessage
以外で送る方法を知らないかもしれないが)
グローバルにsocket.io-clientもインストールしているので、socket.io-clientを使って直接メッセージを送信する方が良いのかもしれない。
$ node
> var io = require('socket.io-client')('http://127.0.0.1:3000');
undefined
> io.emit('open');
...
サーバ側にログが出力される。
open
{}
iocatのソースコードも読んでみたのだけど、message
以外で送る方法がわからなかった。そもそもそういうものではないのかな。