Websocketを使うためのパッケージ。

インストール

expressとインストールするにはこんな感じ

# 適当なディレクトリで

$ npm -g install express
  
$ express -t ejs -c stylus test # ejsは単に好み
  
$ cd test
  
$ npm install # expressの依存関係の解決(ejsとstylusのダウンロード)
  
$ npm install socket.io

とりあえず、socket.ioの公式ページのHOW TO USEの「Using with the Express web framework」に従って、ファイルを作成する。

既存のapp.jsを別名でコピーしておいて、以下のファイルを作る(express 3からはやり方が違う(Socket.IO: the cross-browser WebSocket for realtime apps.

[js title=”app.js”]

var app = require(‘express’).createServer()

, io = require(‘socket.io’).listen(app);

app.listen(3000); // 元は80だけど、これだと「warn – error raised: Error: listen EACCES」というメッセージが出るので変更。たぶんApacheで使ってるから。

app.get(‘/’, function (req, res) {

res.sendfile(__dirname + ‘/index.html’);

});

io.sockets.on(‘connection’, function (socket) {

socket.emit(‘news’, { hello: ‘world’ });

socket.on(‘my other event’, function (data) {

console.log(data);

});

});

[/js]

[js title=”index.html”]

[/js]

で囲まなくても、ブラウザがよきにはからってくれる。

http://localhost:3000などにアクセスすれば、コンソールに変化が表れるはずだ。

examplesのchatを動かしてみる

exampleのchatを動かすためにはjadeとnibが必要なので、上の例だとtest直下のディレクトリで以下のコマンドを打つ。

$ npm install jade nib

exampleのディレクトリに移動して起動する。

$ cd node_modules/socket.io/examples/chat
  
$ node app.js # 上で起動したnodeが残っている場合は、先に終了しておく

ブラウザでhttp://localhost:3000にするとチャット画面がでる。

Broadcasting messagesは自分以外の全員にメッセージを送る

socket.ioの公式ページのHOW TO USEのBroadcasting messages.に

To broadcast, simply add a `broadcast` flag to `emit` and `send` method calls. Broadcasting means sending a message to everyone else except for the socket that starts it.

と書いてある(everyone else except for the socket that starts itに注目)。

全員に送りたいなら、broadcast.emit + emit。

socket.broadcast.emit(‘msg’, ‘message’);
  
socket.emit(‘msg’, ‘message’);

トラブルシューティング

socket.io 0.9.1-1は調子が悪いみたい。

そこにはnpm updateをすれば0.9.0に戻るって書いてあるけどうまくいかなかったから、npm install [email protected]