无法使用socket.io在客户端中接收广播事件

时间:2017-07-17 03:38:08

标签: javascript socket.io ejs

我试图在active.ejs上呈现一些数据,这些数据有一个正在侦听事件users的套接字。事件usersindex.js作为广播发出。

console.log("do you go here")中的套接字侦听器函数中有active.ejs。 但是,它永远不会记录下来#34;你去这里"在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 个答案:

答案 0 :(得分: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);
});