通过 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 的特定客户端的主要内容,如果未能解决你的问题,请参考以下文章