【问题标题】:Socket.io syntaxSocket.io 语法
【发布时间】:2015-07-24 03:37:46
【问题描述】:

我从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 会出现在最后呢?

【问题讨论】:

  • 这意味着require("socket.io")返回一个函数。如果您使用参数server执行该函数,它将返回一个具有使用websocket的函数的对象。(如on您正在使用)所以你放的代码是下面代码的缩短版本。 var Io = require("socket.io");var io = Io(server);

标签: node.js socket.io


【解决方案1】:

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;
}

【讨论】:

    猜你喜欢
    • 2016-03-22
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2011-12-09
    • 2021-03-13
    • 1970-01-01
    相关资源
    最近更新 更多