Node.js sockets.socket(socket_id).emit()-没有方法';插座';

Node.js sockets.socket(socket_id).emit()-没有方法';插座';,node.js,socket.io-1.0,Node.js,Socket.io 1.0,我运行的是nodejs server+express+socket.io版本1.0.4,在我的应用程序中一切正常,但我无法通过以下方式将消息从服务器端发送到客户端: socket_server.sockets.socket(socket_id).emit("message", data); 当我尝试时,服务器抛出以下错误: TypeError: Object #<Namespace> has no method 'socket' 将代码的最后一部分更改为: var io

我运行的是nodejs server+express+socket.io版本1.0.4,在我的应用程序中一切正常,但我无法通过以下方式将消息从服务器端发送到客户端:

socket_server.sockets.socket(socket_id).emit("message", data);
当我尝试时,服务器抛出以下错误:

    TypeError: Object #<Namespace> has no method 'socket'

将代码的最后一部分更改为:

var io = require('socket.io').listen(server);
io.on('connection', function(socket) {
    socket.emit('msg',data);
    //to only that client
    io.sockets.emit('msg',data);
    //to all sockets.
}
io
是您的
socket\u服务器
。您可以监听它的连接,而不是它的套接字。

在1.0中,您应该使用:

io.sockets.connected[socketid].emit();
io.to(socket.id).emit();
发送到特定的客户端

socket_server.sockets.socket(socket_id).emit(); 

已在socket.io 1.0中被替换。

=1.0版中您应使用:

io.sockets.connected[socketid].emit();
io.to(socket.id).emit();
其中socket.id是字符串形式的id。victorwoo在下面的线程中找到了解决方案

注:上述解决方案由Tony Chen描述

io.sockets.connected[socketid].emit();

在1.x版本中,由于io.sockets.connected是一个套接字对象数组,而不是字符串(id)

,因此您可以在文档中找到最旧版本的迁移提示列表,尤其是

向默认命名空间中的所有客户端广播

以前:

emit('eventname','eventdata')

现在:

io.emit('eventname','eventdata')


红色文档

为什么要使用socket\u server.sockets.socket(socket\u id)而不是演示中给出的方式。如果这是旧版本的代码,它可能无法与1.0一起使用。尝试为新版本折射代码。演示中给出了哪种方式发送到一个特定的套接字?