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では無事つながりました。
それ以外は試していません。