【问题标题】:Save Data on Socket in Socket.IO将数据保存在 Socket.IO 中的 Socket 上
【发布时间】:2013-03-30 09:19:09
【问题描述】:

我想在服务器端的套接字上保存一些数据,所以每当客户端向服务器发出任何数据时,我都希望这些数据可用!

一个用例可以是在套接字上存储一个令牌。当客户端第一次连接时,它会发出令牌,如果有的话,或者它会显示登录页面,然后登录数据将被发送到服务器。不管是哪一个,我都想把令牌存储在服务器上,这样之后的每个请求都不需要指定令牌。

稍后,我将使用RedisStore,因此所有运行应用程序的服务器都可以访问所有数据。

我唯一的问题是,我应该将数据存储在套接字的什么位置以便与该客户端相关联?

【问题讨论】:

    标签: node.js websocket socket.io


    【解决方案1】:

    http://socket.io/#how-to-use 滚动到:存储与客户端关联的数据

    使用socket.set和socket.get异步设置和获取数据

    【讨论】:

    • 该方法在 socket.io 1.0 上似乎不再适用,有什么可能的更新吗?
    • io.set() 和 io.get() 方法在 1.0 中已弃用。您必须使用中间件。 socket.io/docs/migrating-from-0-9
    【解决方案2】:

    当你不想使用任何数据库时,你可以将数据保存在全局变量中

    var globalVariable = {};
    
    io.sockets.on("connection", function (socket) {
    
        socket.on("save-client-data", function (clientData) {
              var clientId = clientData.clientId;
              globalVariable[clientId] = JSON.parse(clientHandshakeData);
        });
    
        socket.on("get-client-data", function (clientId) {
    
              var clientData =  globalVariable[clientId];
              socket.emit("get-client-data", JSON.stringify(clientData));
    
        });
    
    });
    

    这适用于我的场景,但我不知道性能影响。

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 2012-03-04
      • 2019-07-20
      • 2012-08-31
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多