Fuu*_*Fuu -1 javascript node.js socket.io
当我命名我的应用程序,我遇到一个问题,我想将数据发送到特定的套接字,这是我正在使用的代码的缩写版本:
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"});
});
}
Run Code Online (Sandbox Code Playgroud)
如您所见,第二个缺少输出中的命名空间部分.在真正的应用程序中,我从客户端管理器中选择套接字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从套接字的哈希中获取套接字.A Socket是我们想要的(它拥有emit方法),所以我的假设是这是在这种情况下使用的方法.
| 归档时间: |
|
| 查看次数: |
1339 次 |
| 最近记录: |