簡體   English   中英

使用socket.io向所有客戶端發出問題

[英]Problems with emitting to all clients with socket.io

var io = require('socket.io').listen(server1);
io.on('connection', function(io){
    socket_call_data = function(some,data){
        io.emit("new_peer_data", result);
    }

    io.on('event', function(data){
      //doing stuff
      socket_call_data(some,data);
    });
});

這是我當前的代碼,問題是io.emit (在socket_call_data函數中)似乎僅向連接的用戶發出。 因此,在閱讀后,我使用了io.broadcast.emit 這很好用,但是它不包括連接的用戶-我也希望向其發送數據。 所以,最后我來了解有關io.sockets.emit ,據稱它可以將其發送給所有客戶端。 但是,相反,我得到了錯誤:

Missing error handler on `socket`.
TypeError: Cannot call method 'emit' of undefined
    at socket_call_data (/var/www/html/live_nodejs/handle.js:47:20)

好吧 套接字 .emit未定義...

我怎么了?

謝謝

當用戶連接時,您似乎正在用單個套接字覆蓋io變量。 connection事件上的io arg改為socket

var io = require('socket.io').listen(server1);
io.on('connection', function(socket){
    socket_call_data = function(some,data){
        io.emit("new_peer_data", result);
    }

    socket.on('event', function(data){
      //doing stuff
      socket_call_data(some,data);
    });
});

然后io.emit()應該發出到所有套接字。

發生的事情是您正在函數中傳遞io

io.on('connection', function(io){
     //Your Code here
});

因此,全局io和您在函數內部傳遞的io變得模棱兩可。 您所需要做的就是將函數內部傳遞的io更改為其他變量,例如socket或其他內容。

io.on('connection', function(socket){
     //Your code here
     socket.emit("some event specific to this particular socket");
     io.sockets.emit("This event will be broadcasted to everyone connected");
});

這應該可以幫助您。

暫無
暫無

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

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