簡體   English   中英

發送到套接字IO socket.id

[英]Emit to Socket IO socket.id

我試圖發出一個特定的套接字ID:

socket(user[playID]).emit('correct', data);

但是我得到了:

TypeError: object is not a function

如果我注銷user[playID]我會得到一個有效的套接字ID。

不勝感激!

這是我的設置,以防我錯過了什么:

// Tell Socket.io to pay attention
servio  = io.listen(server);

// Tell HTTP Server to begin listening for connections on port 3250
sock    = server.listen(3250);

這應該做到這一點

servio.sockets.socket(id).emit('hello');

這個答案涵蓋相同/相似的主題。 簡而言之,考慮自己保持對連接客戶端的引用並根據需要向它們發出,而不是依賴於socket.io的內部,這可能會改變。

另一種方法是:

var players = [];

io.sockets.on('connection', function(socket){

    socket.on('skt_init', function (data) {
            var player = new Object();
            player.id = data.id;
            player.socket = socket.id;
            players.push(player);
    });

    socket.on('disconnect', function() {        
        var len = 0;

        for(var i=0, len=players.length; i<len; ++i ) {
            var p = players[i];

            if(p.socket == socket.id){
                players.splice(i,1);
                break;
            }
        }
    });

    socket.on('skt_event', function(data, id_player){
        var len = 0;

        for(var i=0, len=players.length; i<len; ++i ) {
            var p = players[i];
            if(p.id == id_player){
                io.sockets.socket(p.socket).emit('correct', data);
                break;
            }
        }
    });

希望有所幫助。

根據http://socket.io/docs/rooms-and-namespaces/

Socket.IO中的每個Socket由隨機的,不可思議的唯一標識符Socket#id標識。 為方便起見,每個套接字自動加入由此ID標識的房間。

你放到像這樣的房間:

io.to('some room').emit('some event')

如果你想只發出一個特定的socket.id,只需用相關的id替換'some room'即可。

更新:在socket.io-1.4中你必須在套接字ID之前添加“/#”(非常令人沮喪的是它現在不起作用)。 您還可以從后端查看所有連接的套接字io.sockets.connected

io.to( "/#" + socket_id).emit("event_name",{data:true})

這應該工作:

servio.sockets.sockets[playId].emit(...)

由於socket.io不提供穩定的API來從套接字的ID獲取套接字,因此您可以簡單地(並且容易地)使用由套接字ID鍵入的對象來跟蹤它們。

sockets_by_id = {}

io.on "connection", (socket)->
    sockets_by_id[socket.id] = socket

sockets_by_id[socket_id].emit event, data...

(^的CoffeeScript ^)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM