2017-07-17 49 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