【问题标题】:Socket.io client specific variableSocket.io 客户端特定变量
【发布时间】:2021-11-06 19:40:18
【问题描述】:

如何在 Socket.io 中存储会话特定信息?

var client={}; //is this static across all sockets (or connected clients) that are connected? 
io.on('connection', function(socket){

  client.connectiontime=Date.now();
});


//on another io.on('connection') for the same connected client
io.on('connection', function(socket){
 store(client.connectiontime);
}

如果客户端变量被认为是静态的,如何仅将客户端变量用于与当前连接的客户端相关的操作?

【问题讨论】:

    标签: node.js session variables scope socket.io


    【解决方案1】:

    首先,每个套接字都有一个可以用来引用它的名称,但是每次同一个客户端连接时都会改变,所以如果它应该在客户端离开后保留,这将没有用。如果您的目标是将连接时间存储在某个地方(数据库?),那么您必须从客户端获取一个唯一标识符,该标识符可用于再次找到它们,类似于登录。然后,您会将日期对象传递给处理存储该时间的函数。

    您应该注意,“连接”仅在套接字第一次连接时被调用。当客户端执行某些操作时,连接不是您通常会使用的事件,除非它们在服务器程序的每次访问之间断开连接。

    如果您确定只想使用 Client 对象,您可能必须创建一个客户端数组并使用套接字 id 作为稍后访问该对象的键。然后你会有类似

    array[socket.id].connectiontime = Date.now()

    var client={}; //is this static across all sockets (or connected clients) that are connected? 
    var clients = [];
    io.on('connection', function(socket){
      clients[] = {
                    id : socket.id
                    connectiontime : Date.now()
      }
    });
    
    
    //on another io.on('connection') for the same connected client
    io.on('connection', function(socket){
    // Here you would search for the object by socket.id and then store
     store(client.connectiontime);
    }
    

    【讨论】:

    • 但是有一个变量只能用于这个特定的客户端会话吗?
    • 在“连接”上生成一个socket.id,这是程序使用识别它正在与哪个套接字通信的id。所以在我提供的代码中, id: socket.id 部分正在使用该唯一标识符。它不会告诉你这个人,因为如果他们断开连接并重新连接,它会改变,但它将是连接到服务器代码时专门用于该用户会话的标识符
    • 所以我需要手动管理这个?我认为 socket io 会提供一些方法来存储仅适用于每个客户端会话的值,并让我免于维护客户端及其会话的工作
    • 您可以像添加任何其他对象一样向套接字对象添加属性。不过我还没有尝试过,所以我不知道它的效果如何。
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 2015-07-11
    • 2012-04-24
    • 2012-05-24
    • 2015-08-06
    • 1970-01-01
    • 2011-12-03
    • 2021-08-08
    相关资源
    最近更新 更多