【问题标题】:How to join always the same room in socket.io?如何在socket.io中始终加入同一个房间?
【发布时间】:2019-03-08 22:54:49
【问题描述】:

我正在尝试使用 socket.io 制作一个聊天应用程序,我所做的是创建一个只有两个人的房间,如果房间里有两个人已经创建了另一个人等等,我的问题是让我们说您加入了 10 号房间,但您刷新了网页,因此它会断开您与房间的连接,而另一个人会断开与 2 号房间的连接,因此当您寻找空房间时,您将加入 2 而不是 10,我不能只使用常量作为名称,因为我需要在每次满时动态创建另一个。

【问题讨论】:

  • 你连接房间的逻辑有点奇怪.... 一个插槽是空的 - 所以要让一个人进去?就像一些“与随机的陌生人交谈”? Room 的使用寿命是多久?没有人的时候房间会死吗?还是空闲等待两个人加入?或者我没有正确回答您的问题...您想再次加入以前的房间吗?
  • 是的,我正在制作一个聊天机器人,所以当一个人加入房间时,它会加入聊天机器人并与之交谈,但如果这个人出于某种原因刷新网页,它会加入另一个房间,如果有之前有一个空的,因为房间是从 1 到 n 创建的,它会将您放在第一个有一个可用插槽的房间(如果有可用插槽,我会逐个检查),因此如果另一个人已经完成与机器人的交谈,它将断开连接并且如果您刷新浏览器,您将加入您之前的第一个可用房间。

标签: javascript node.js socket.io


【解决方案1】:

您可以将用户加入的房间名称或号码存储window.localStorage
在页面刷新时,检查 localStorage 中是否有任何值,如果有,将该值用作您的 namespace

https://socket.io/docs/rooms-and-namespaces/

let roomID = localStorage.roomID; // Try to get the ID from localStorage

if ( !roomID ) { // no ID found? Create room and store ID to localStorage
  // CREATE A NEW ROOM ID (someGeneratedRoomID) <<< YOUR LOGIC HERE
  roomID = localStorage.roomID = someGeneratedRoomID; // Store it
} 

// Connect
io.on('connection', function(socket){
  socket.join( roomID );
});

// Talk
io.to( roomID ).emit('some event');

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2018-05-24
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2014-07-18
    相关资源
    最近更新 更多