无法加入socket.io房间

问题描述 投票:0回答:1

我正在尝试使用流星中的socket.io制作类似于聊天应用程序的WhatsApp。

我面临的问题与一对一私人消息有关,为此,我试图通过为每个用户连接创建一个空间来解决此问题。

应用程序看起来像这样=>

enter image description here

在上图中,joy和sj通过唯一的room_id在同一房间内连接,并且在Joy和846的情况下也相同。

这是我的代码=>

首先在客户端上,当用户单击其连接时,此代码将运行=>

  let connected_room_id = connections.find({
    user_id: currUser[0].user_id,
    connected_to: connectedUser[0].user_id
  }).fetch();
  socket.emit('join', {
    room_id: connected_room_id[0].room_id
  });

现在在服务器端以捕获加入事件=>

socket.on('join', function(data) {
  socket.join(data.room_id);
});

现在,当喜悦希望将味精发送给sj时,此代码将运行=>

  Meteor.call('addNewMessage', e.currentTarget.id, msgContent);
  socket.emit('send message', {
    msg: msgContent,
    room_id: connected_room_id[0].room_id,
    name: currUser[0].name,
    message_id: currUser[0].user_id
  });

现在在服务器端以捕获发送消息事件=>

  socket.on('send message', data => {
  io.to(data.room_id).emit('connectToRoom', {
    msg: data.msg,
    name: data.name,
    msg_id: data.message_id
  });
});

现在在客户端以捕获connectToRoom事件=>

  socket.on('connectToRoom', function(data) {
  const currUser = Meteor.users.find({ _id: Meteor.userId() }).fetch();
  if (currUser[0].user_id === data.msg_id) {
    document.getElementById('chatBox').insertAdjacentHTML(
      'beforeend',
      `<li class="chat-right">
      <div class="chat-hour">
        08:56 <span class="fa fa-check-circle ml-2"></span>
      </div>
      <div class="chat-text">
        ${data.msg}
      </div>
      <div class="chat-avatar">
        <img
          src="https://www.bootdey.com/img/Content/avatar/avatar3.png"
          alt="Retail Admin"
        />
        <div class="chat-name">${data.name}</div>
      </div>
    </li>`
    );
  } else {
    document.getElementById('chatBox').insertAdjacentHTML(
      'beforeend',
      `
        <li class="chat-left">
                <div class="chat-avatar">
                  <img
                    src="https://www.bootdey.com/img/Content/avatar/avatar3.png"
                    alt="Retail Admin"
                  />
                  <div class="chat-name">${data.name}</div>
                </div>
                <div class="chat-text">
                ${data.msg}
                </div>
                <div class="chat-hour">
                  08:55 <span class="fa fa-check-circle ml-2"></span>
                </div>
              </li>
        `
    );
  }
});

问题=>

当欢乐向sj发送消息时,它也将发送到sj的其他连接,例如846。我想要的是,当joy向sj发送消息时,它应该仅在sj和joy连接的房间中可见,而不能在其他房间看到。

您可以在这里查看整个代码=> https://github.com/sjcodebook/chat-app-in-meteor

感谢您阅读和回答问题。

javascript node.js meteor websocket socket.io
1个回答
0
投票

您如何解决问题,请告诉我。我也有同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.