Socket.io语法

时间:2015-05-13 02:53:37

标签: node.js socket.io

我从socket.io docs获得了以下代码:

var server = require('http').createServer();
var io = require('socket.io')(server);
io.on('connection', function(socket){
  socket.on('event', function(data){});
  socket.on('disconnect', function(){});
});
server.listen(3000);

第二行的语法对我来说似乎很奇怪:

var io = require('socket.io')(server);

我理解的是require是一个以socket.io为参数的函数。但为什么server最终会出现?

1 个答案:

答案 0 :(得分:0)

require()函数调用从模块返回module.exports对象。该对象可以是“构造函数”(函数是对象),其被设计为被调用以初始化模块。这就是这种情况,并且这样做的原因是因为模块需要一个参数(服务器对象)来初始化自己。

您的代码:

var io = require('socket.io')(server);

可以被认为更简单:

// get the socket.io module
var io_module = require('socket.io');

// call the socket.io constructor to initialize a socket.io instance that
// is hooked up to a particular server
var io_instance = io_module(server);

因此,您的单行代码实际上只是这个两步流程的快捷方式,它不会保留模块本身的句柄。

在socket.io模块内部,它看起来像这样:

module.exports = function(server) {
    // called to initialize the module

    // create a socket.io instance and return it
    // ...

    return instance;
}