LoginSignup
40
37

More than 5 years have passed since last update.

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

Posted at

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

40
37
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
37