套接字中的命名空间.发送到特定套接字时的IO
Namespacing in socket.io when sending to a particular socket
当我命名我的应用程序时,我遇到了一个问题,我想将数据发送到特定的套接字,这里是我使用的代码的缩写版本:
var io = require('socket.io').listen(config.web.port);
var chat = io.of('space').on('connection', function (socket) {
// This works:
// Input: xhr-polling received data packet 5::/space:{"name":"test"}
// Output: xhr-polling writing 5::/space:{"name":"test","args":[{"msg":"test"}]}
socket.on('test', function(){
socket.emit('test',{msg: "test"});
});
// This fails:
// Input: xhr-polling received data packet 5::/space:{"name":"test2"}
// Output: xhr-polling writing 5:::{"name":"test2","args":[{"msg":"test2"}]}
socket.on('test2',function(){
io.sockets.socket(socket.id).emit('test2',{msg: "test2"});
});
}
可以看到,第二个文件缺少输出中的名称空间部分。在实际应用中,我从客户端管理器中选择socket id,所以我使用socket。id,而不是client. getsocketid(),但思想是一样的,我只是在这里回显到原始客户端。
我如何使第二个方法在输出到客户端时使用正确的命名空间?
检查SocketNamespace
的源代码后,语法似乎是io.of('space').socket(id).emit(...
。
[编辑根据Fuu的评论]
为了找到这个,我检查了Socket。IO GitHub存储库并寻找一个与名称空间有关的文件——namespace.js
似乎符合要求。这个文件不是很长,所以我扫描了它,寻找SocketNamespace
的原型上的方法,看起来它可能会做我们想要的。
由于您调用io.sockets.socket
来查找全局命名空间上的套接字,因此SocketNamespace.prototype.socket
对我来说是有前途的。此外,它接受一个名为sid
的参数,并且该方法的主体似乎正在通过此ID从套接字的哈希中获取套接字。Socket
是我们想要的(它包含emit
方法),所以我的假设是这是在这种情况下使用的方法。
相关文章:
- 快速的套接字 io 实例/中间件
- 套接字io客户端网络::ERR_CONNECTION_REFUSED
- 套接字 IO 的选择传输方法
- 无法加载套接字.io.js
- 套接字IO示例
- 套接字IO未连接到正确的服务器
- 服务器到服务器套接字IO消息
- 套接字 IO 未使用 swift 连接到服务器
- 显示多个用户使用套接字 IO 加入
- 节点/套接字 IO 多个播放器
- 我无法将套接字io与Windows Phone 8.1 C#连接
- 套接字 IO 1.2 查询参数
- 发出到套接字 IO socket.id
- 使用 angularJs 显示来自套接字 io 的数据
- 使用套接字io和angularjs处理频繁变化的时间序列数据的策略
- NodeJS 套接字 IO 停止随机发射
- 节点快速 3x 套接字 IO 测试
- 套接字 IO 重新连接
- 使用 jwt 和套接字 io 的身份验证流
- 找不到套接字IO(404)