Socket.io 2.x 有风帆

Socket.io 2.x with Sails

目前 sails.io 正在使用 socket.io 1.7.1。它不会在 sails 1.0 中改变。所以我打算使用 socket.io 2.0 使用 socket.io 包而不是依赖 sails real-time 层。根据 socket.io 文档,在 express 中很容易实现如下:

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

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  console.log('a user connected');
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

我们如何在 sails 中编写相同的 socket.io 2.0 实现?

Sails 1.0 应用程序中使用的底层 Express 服务器公开为 sails.hooks.http.server。因此,您可以在应用程序的 config/bootstrap.js 文件中搭载它:

module.exports.bootstrap = function (done) {

  var io = require('socket.io')(sails.hooks.http.server);
  io.on('connection', function(socket){
    console.log('a user connected');
  });

}

您还需要在 .sailsrc 文件中关闭默认的 socketspubsub 挂钩:

"hooks": {
  "sockets": false,
  "pubsub": false
}

这也有释放 sails.io 全局空间的好处,因此您可以将其重新用于您自己的实施。