【问题标题】:Emit to a specific client with socketId via Socket.IO 1.0通过 Socket.IO 1.0 发送到具有 socketId 的特定客户端
【发布时间】: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) 不能用

【问题讨论】:

    标签: node.js sockets socket.io socket.io-1.0


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2014-04-24
      • 2018-01-30
      • 1970-01-01
      • 2018-08-12
      • 2023-04-01
      相关资源
      最近更新 更多