JavaScript
Express
socketio

express4でsocket.io 1.0xを使ってみる

More than 3 years have passed since last update.

express-generatorのコマンド

$express -e socketSample

で生成したテンプレートとsocketIO v1.0を混ぜる方法。

express4では、 npm startで

bin/www

が実行されるようになっています。


www

#!/usr/bin/env node

var debug = require('debug')('sockets');
var app = require('../app');

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});


これをsocket.ioを使うように変更します。

socket.ioのdocumentによれば、

express3 or 4の場合は、

var app = require('express')();

var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(80);

とせよとありますので、wwwを以下のように変更しました。 skioというモジュールを作って、そちらにsocketioの処理は任せています。

expressはapp.jsにメインのコードが書かれますが、app.jsからの相対パスを各コードの上に書いておきます。


改良後の./bin/www

#!/usr/bin/env node

var debug = require('debug')('sockets');
var app = require('../app');
var skio = require('../routes/model/skio');

app.set('port', process.env.PORT || 3000);

socketio();



./routes/model/skio.js

var app = require('../../app');

var http = require('http').Server(app);
var io = require('socket.io')(http);

function skio() {
// Socket.IO
http.listen(app.get('port'), function() {
console.log('listening!!!');
});

io.on('connection', function(socket){
socket.on('chat message', function(msg){
console.log('message: ' + msg);
io.emit('chat message', msg);
});
});
}

module.exports = skio;


このようにwwwではexpressにport番号だけを設定し、

後でhttpでlistenしておきます。

app.jsへの修正はいっさいしていません。generetorが吐いたコードのままです。

localhost:3000では無事つながりました。

それ以外は試していません。