【问题标题】:Can't receive broadcasted event in client using socket.io无法使用 socket.io 在客户端接收广播事件
【发布时间】:2017-12-21 11:35:00
【问题描述】:

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

我在active.ejs 的套接字侦听器函数中有一个console.log("do you go here")。 但是,它永远不会在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>

【问题讨论】:

    标签: javascript socket.io ejs


    【解决方案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);
    });
    

    【讨论】:

    • 这正是我想要做的,将事件发送给除了刚刚连接的客户端之外的所有客户端。当我有两个打开的浏览器,例如连接了两个客户端时,我希望每个都在divid="active" 中将另一个(但不是自身)显示为active 客户端。但是,socket.on 函数没有触发。
    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 2013-03-02
    • 2020-03-12
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2017-07-02
    • 2013-03-06
    相关资源
    最近更新 更多