2017-07-17 70 views
0

我試圖呈現active.ejs其中有一個套接字正在偵聽事件users的一些數據。事件usersindex.js作爲廣播發出。使用套接字無法在客戶端接收廣播事件

我有一個console.log("do you go here")在我的套接字偵聽器功能active.ejs。 然而,它從來沒有在socket.on中記錄「你會去這裏」,這意味着index.js發出的廣播不會被active.ejs收到。我如何獲得它?

index.js

var io = socket(server); 
io.on('connection', function(socket){ 
    count++; 
    socket.broadcast.emit('users', socket.handshake.query); 
}); 

active.ejs

..html boilerplate 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script src="http://localhost:4000/socket.io/socket.io.js"></script> 
    </head> 
    <body> 
    <p> 
     Welcome, 
     <%= user_info.uri %> 
    </p> 
    <div id="active"></div> 
    <script> 
    var socket = io.connect('http://localhost:4000/tune-in', {query: <%- JSON.stringify(user_info) %>}); 
    var active = document.getElementById('active'); 

    // Listening for events on socket 
    socket.on('users', function(data){ 
     console.log('do you go here'); 
     active.innerHTML += "<p><em>" + data.display_name + " is connected" + "</em></p>"; 
    }); 
    </script> 
    </body> 
</html> 

回答

1

您的代碼socket.broadcast.emit('users', socket.handshake.query);不正是它應該 - 發送事件給所有客戶端,除了剛剛連接的客戶端。
您可能想用io.emit('users', socket.handshake.query)代替。

編輯:

命名空間添加到服務器:

var io = socket(server); 
io.of('/tune-in').on('connection', function(socket){ 
    count++; 
    socket.broadcast.emit('users', socket.handshake.query); 
}); 
+0

這正是我想要它做的,發送事件給所有客戶端,除了剛剛將一個。當我有兩個打開的瀏覽器,例如兩個連接的客戶端時,我希望每個人都用'id =「active」''''''div'將''另一個(但不是它自己)顯示爲'active'客戶端。但是,'socket.on'函數不會觸發。 – Kek