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.on
和io.sockets.on
之间有什么区别,我应该在第一次连接时使用哪个..?
虽然socket.on npm page 使用io.on
为什么它对io.sockets.on
有效
【问题讨论】:
不是 100%,但我认为这只是一个别名。与io.sockets.emit
和io.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',...)的主要内容,如果未能解决你的问题,请参考以下文章
socket.io |我应该将路由处理程序包装在 io.on('connection') 中吗?
io.on('connection')事件是否需要将数据发送到预先存在且已连接的套接字?