io.on('connection',...) 与 io.sockets.on('connection',...)

Posted

技术标签:

【中文标题】io.on(\'connection\',...) 与 io.sockets.on(\'connection\',...)【英文标题】:io.on('connection',...) vs io.sockets.on('connection',...)io.on('connection',...) 与 io.sockets.on('connection',...) 【发布时间】:2014-08-07 15:34:09 【问题描述】:

我正在将socket.io 和Mean 堆栈用于Web 应用程序。我在 3006 端口上启动了套接字服务器..

var http = require('http').createServer(app);
http.listen(3006);
var io = require('socket.io').listen(http);

这两个似乎都适用于连接。

io.on('connection', function (socket) 
    console.log('Socket succesfully connected with id: '+socket.id);
);

还有……

io.sockets.on('connection', function (socket) 
   console.log('Socket succesfully connected with id: '+socket.id);
);

io.onio.sockets.on 之间有什么区别,我应该在第一次连接时使用哪个..?

虽然socket.on npm page 使用io.on 为什么它对io.sockets.on 有效

【问题讨论】:

不是 100%,但我认为这只是一个别名。与io.sockets.emitio.emit 一样,见here。 @Ben Fortune 很好,当我同时拥有它们时,它们都被执行了..两次使用 io.on('connection',...) 是错误的.. ? 【参考方案1】:

Socket.IO 客户端默认连接的默认命名空间是:/。 它由io.sockets 或简单的io (docs) 标识。

此示例从文档中复制:

// the following two will emit to all the sockets connected to `/`

io.sockets.emit('hi', 'everyone');

io.emit('hi', 'everyone');           // short form

我认为'on' 和'emit' 是一样的:使用'io.sockets' 相当于只使用'io',它只是一个更短的形式。

为您的套接字“命名空间”,意味着分配不同的端点或路径(这可能很有用)。

来自对此 SO question 的回答:

“Socket.io 为您完成所有工作,就好像它是两个独立的实例一样,但仍将信息限制在一个连接中,这非常聪明。”

【讨论】:

以上是关于io.on('connection',...) 与 io.sockets.on('connection',...)的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 io.on('connection') 监听器?

socket.io |我应该将路由处理程序包装在 io.on('connection') 中吗?

io.on('connection')事件是否需要将数据发送到预先存在且已连接的套接字?

io.emit 与 socket.emit

socket.io 中 io.on 和 socket.on 的区别

在套接字io函数中重用变量