Socket.io重新连接会导致新的用户名

时间:2016-10-08 09:33:29

标签: javascript node.js sockets socket.io chat

我正在node.jssocket.io创建聊天。

当用户打开我的应用程序时,我会ping服务器并要求它让用户加入特定的房间并设置一个随机用户名(可以在以后编辑)。

我用这个

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

  socket.on('join room', (roomId, callback) => {
    // leave and join room
    if (socket.roomId) {
      socket.leave(socket.roomId);
    }
    socket.roomId = roomId;
    socket.join(roomId);

    // set username
    if (!socket.username) {
      socket.username = getRandomUsername();
    }
  });

});

它似乎有效,但我遇到过应用程序长时间运行的情况,突然用户的用户名发生了变化。

我怀疑这种情况发生是因为用户已断开连接,socket.io已尝试重新连接。当用户重新连接时,原始套接字丢失(因此它没有用户名),并为新套接字分配了一个新用户名,该用户名将覆盖原始客户端套接字。

我的代码是否存在问题,方法是为用户分配一个随机用户名?当用户未登录时,它会以某种方式与Google Docs相同(他们通常会为您提供动物的名字)。

我该如何解决这个问题?我非常想避免使用cookies。一个选项可能是告诉客户端它丢失了连接,它必须重新加载页面,然后要求服务器获得相同的用户名。

我已使用以下代码在客户端上保存指定的用户名:

const socket = io();

let username = null;

socket.on('connect', function() {
  socket.emit('join room', roomId, function (newUsername) {
    username = newUsername;
  });
});

(...)

0 个答案:

没有答案