久しぶりにsocket.ioを使うので、簡単なプログラムを作ってテストをしてみることにしました。サーバサイドはこれ。
///var fs = require(""fs"");var server = require(""http"").createServer(function(req, res) { res.writeHead(200, {""Content-Type"":""text/html""}); var output = fs.readFileSync(""./index.html"", ""utf-8""); res.end(output);}).listen(8080);var io = require(""socket.io"").listen(server);var reply:string;io.sockets.on(""connection"", (socket) => { io.sockets.emit(""message"", ""thank you for connecting""); console.log(""connection from socket.io client""); socket.on(""message"", (message) => { console.log(""key:message %s"", message); reply= ""I got message from you:"" + message; io.sockets.emit(""message"", reply); }); socket.on(""disconnect"", () => { console.log(""disconnected""); }); socket.on(""CS_REQ_registerdRiders"", () => { io.sockets.emit(""SC_RES_registeredRiders"", JSON.stringify(registeredRiders)); console.log(""CS_REQ_registerdRiders:response send""); });});
クライアント側はこんな感じ。
socket.io test
ただブラウザでテストするのはどうにもまどろっこしいので、コマンドラインから実行できるよう、ネット上で多く紹介されているwscatを使うことにしました。最初にハマったのは、wscatがwsに同梱されているのでは無く、wscatとして配布されていること。今のwsのレポジトリではwscatは実行できないようです。パスの問題でしょうか。で次にハマったのが、wscatでいくらnodeに接続しても接続が確立されずにhang upとなったり、無言となったりするという現象。いろいろ試してみた挙げ句、wscatではなくiocatを使うと接続に成功しました。iocatsocket.ioはメッセージ送信時にキーを付ける機能があったりしますので、そのあたりが通常のwebsocketとは互換性が無いのかもしれません。(2016/03/14追記)私が誤解していたようです。socket.ioはwebsocketの一実装だと思っていたのですが、そもそも違うプロトコルなんですね。リアルタイム双方向通信について“””