通过 Socket.IO 1.0 发送到具有 socketId 的特定客户端

Posted

技术标签:

【中文标题】通过 Socket.IO 1.0 发送到具有 socketId 的特定客户端【英文标题】:Emit to a specific client with socketId via Socket.IO 1.0 【发布时间】:2014-10-24 05:53:27 【问题描述】:

我知道这是一个非常受欢迎的问题,但我没有找到我的问题的答案。 非常相似的问题: socket.IO: how can i get the socketid when i emit to a specific client in socket.io 1.0

我想使用 socketId 向特定的客户端发出,但是我得到一个错误,见下文。

socket.join( gameId );
io.sockets.connected( opponent ).join( gameId );
socket.emit( 'ready', gameId, 'X', x, y );
io.sockets.connected( opponent ).emit( 'ready', gameId, 'O', x, y );

错误:

          io.sockets.connected( opponent ).join( gameId );
                     ^
TypeError: Property 'connected' of object #<Namespace> is not a function

请帮助我。 忘了说了,.join(gameId)io.to(socket.id) 不能用

【问题讨论】:

【参考方案1】:

加入房间

socket.on('someEventName', function(Param)
    try 
        socket.join('A_Temporary_Room');    
     catch(err) 
        console.log(err);
    
);

向该房间的所有成员发送消息

io.sockets.in('A_Temporary_Room').emit('ready', 'String');

编辑

socket.on('setId', function(SocketId) 
    socket.set('socketId', SocketId, function(data)
        //callback
        /* Here you can maintain an array of all connected clients like
            clients[SocketId].push(socket); Where clients is an object.
         */
    );
);

现在要向特定客户端发出事件,请使用此

clients[SocketId].emit('PrivateMessage', 'This is a private message');

【讨论】:

在我的应用程序中,服务器正在决定何时应将套接字添加到房间。感受不同!再说一次,我有 socketsID 池,我想向特定客户端发出“加入房间”的事件。请不要忽略魔术词“特定”... @EldarNezametdinov 更新了答案。【参考方案2】:

我不确定我是否完全明白你的问题,但你可以通过发射到套接字的默认房间来发射到特定的套接字 id。每个套接字都以套接字的 id 作为名称加入一个默认房间。

http://socket.io/docs/rooms-and-namespaces/#default-room

【讨论】:

以上是关于通过 Socket.IO 1.0 发送到具有 socketId 的特定客户端的主要内容,如果未能解决你的问题,请参考以下文章

通过 socket.io 1.0 实时音频

向 Socket.IO 1.0 中的特定 ID 发送消息

如何通过 socket.io 将图像发送到服务器?

Socket.IO 延迟发送

通过 socket.io 发送画布图像

通过Socket.io(Node.js)将对象发送到客户端