【问题标题】:Socket.io + express roomsSocket.io + 快捷房间
【发布时间】:2019-03-02 04:56:22
【问题描述】:

我正在开发一个具有实时聊天功能的在线网站,几天来我一直在尝试设置 socket.io 房间,但我的一个自定义事件没有发出。

我的网站有 2 个路径,//play。当有人在/ 路径中填写表格时,网站会将他们重定向到/play 路径。

const io = require('socket.io')(listener);

io.on('connection', socket => {

  socket.on('add user', data => { // This event gets emitted when the user submits the form at `/`, in a client-side js file. 
    socket.username = data.username;
    socket.room = data.room;
    socket.score = 0;
    socket.join(data.room);
    io.sockets.in(data.room).emit('user joined', { // This event gets 'handled', in another (not the same one) client-size js file.
    username: data.username,
    room: data.room
  });
  });

  socket.on('disconnect', function () {
   io.sockets.in(socket.room).emit('user left', {
   username: socket.username,
   room: socket.room
  });
  socket.leave(socket.room)
});


});

在另一个客户端js文件中:

var socket = io.connect();  
let joined = 0;

socket.on('user joined', data => {
  joined++;
  console.log(joined, data)
  const elemental = document.createElement("LI");
  const info = document.createTextNode(data.username);
     elemental.appendChild(info);
   document.getElementById('people').appendChild(info)
});

添加用户事件代码执行得很好,但加入的用户没有.. 我几乎可以肯定它与路径有关。我阅读了 socket.io 命名空间,但似乎它们就像不同类型的房间。 谁能告诉我怎么了?

编辑:我应该提到没有错误出现。

【问题讨论】:

  • 你试过了吗:socket.on('error', console.log);client-side.js
  • 刚刚试了一下 - 什么也没发生。
  • 好的,我现在看到你的问题了。

标签: javascript node.js socket.io


【解决方案1】:

没有看到你的整个代码,我会假设client-side.js 代码上的套接字没有加入data.room 房间,这就是为什么你在'user join' 事件监听器上没有得到任何东西发生这种情况是因为您可能在客户端代码上有多个 socket.io 连接。

您有多种方法可以解决此问题,具体取决于您要实现的目标。

  • 不仅向房间里的人发射,还向用户加入特定房间的所有套接字发射。 io.emit('user joined') 而不是 io.sockets.in(data.room)...
  • 前端应该只有一个var socket = io.connect();,否则正在发射的套接字:add user 并因此加入到data.room 与正在侦听的套接字不同:user joined,这就是为什么你永远不要在那个套接字上得到事件,因为你有 2 个不同的套接字,一个加入房间,一个除了等待永远不会发生的事件之外什么都不做。

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2013-10-18
    相关资源
    最近更新 更多