【问题标题】:How can I send data to a specific socket?如何将数据发送到特定的套接字?
【发布时间】:2017-06-09 19:01:59
【问题描述】:

我的问题是,我目前使用带有 node.js 的库“ws”发送特定套接字的解决方案还不够好。

原因是因为如果我使用客户端定义的相同用户 ID 使用多个选项卡连接到 websocket 服务器,它只会引用指定用户 ID 的最新连接。

这是我的代码:

// Server libraries and configuration   
var server = require("ws").Server;
var s = new server({ port: 5001});

// An array which I keep all websockets clients
var search = {};

s.on("connection", function(ws, req) {
  ws.on("message", function(message){
    // Here the server process the user information given from the client
    message = JSON.parse(message);
    if(message.type == "userinfo"){
      ws.personName = message.data;
      ws.id = message.id;
      // Defining variable pointing to the unique socket
      search[ws.id] = ws;
      return;
    }
  })
})

如您所见,每次连接相同 id 的套接字时,都会引用最新的。

例子如果你不明白:

  1. 客户端连接到 ID 为 1337 的服务器
  2. search[1337] 定义为 --> websocket 1
  3. 具有相同 ID 的新连接:1337
  4. search[1337] 改为引用 websocket 2 的变量

【问题讨论】:

  • 显然会发生,你为什么要覆盖socket id?将所有套接字 ID 保存在一个数组中,供 1 个用户使用。
  • 您能详细说明一下吗?所以你的意思是我应该为每个包含套接字连接的用户 ID 创建一个数组?
  • 是的,我基本上使用有房间的socket.io。所以它变得更容易了。我从来没有ws,但这可以解决您的问题。

标签: javascript node.js websocket


【解决方案1】:

Websocket 提供了一种在浏览器和服务器之间创建低延迟网络“套接字”的方法。

注意这里的客户端是浏览器,而不是浏览器上的标签。

如果您需要管理浏览器和服务器之间的多个用户会话,则需要自己编写代码。

【讨论】:

  • 感谢您的澄清。然而,这并不能解决我的问题。我想知道如何处理我在您的帮助下提供的信息。
  • 我会通过将用户分配给单个文档(由浏览器选项卡表示)并将该数据与任何 websocket 调用一起发送来解决您的问题。这将区分每个文档/选项卡的用户。
猜你喜欢
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多