多个连接,但单个 websocket.on("message") 事件发射器

Posted

技术标签:

【中文标题】多个连接,但单个 websocket.on("message") 事件发射器【英文标题】:Multiple connections, but single websocket.on("message") event emitter 【发布时间】:2016-02-16 20:48:32 【问题描述】:

我有一个设备与 Einaros/ws WebSocket 服务器建立两个 WebSocket 连接。每当第二个 WebSocket 连接向服务器发送消息时,只有第一个 websocket.on("message") 事件发射器响应。无法区分消息来自哪个 WebSocket,因为似乎只有一个 websocket.on("message") 事件发射器对象。

如何在不从客户端传递 ID 的情况下区分从哪个 WebSocket 连接接收消息?

如果我忽略了一些简单的事情,我深表歉意,我是 node.js 和编码新手。从下面的代码看起来应该为每个 WebSocket 连接创建单独的事件发射器对象,以便服务器知道消息来自哪个连接。我的代码如下所示:

var connections = new Map();
var idCounter = 0;
wss.on("connection", function connection(ws) 
    var connectionID = idCounter++;
    connections.set(connectionID, ws);
    var session = connections.get(connectionID);
    session.on("message", function incoming(message) 
        session.send(message);
    

--- 更新---

我进行了另一项测试。使用下面的代码,“objectTest”包含由打印到控制台的“sec-websocket-key”区分的唯一 WebSocket 连接。然而“this.send(message);”和“console.log(this);”两者都指第一个建立的 WebSocket 连接,即使“objectTestMap”包含第二个唯一的“objectTest”。

var connections = new Map();
var idCounter = 0;
wss.on("connection", function connection(ws) 
    var connectionID = idCounter++;
    connections.set(connectionID, ws);
    var session = connections.get(connectionID);
    var sendThis = String(connectionID);
    session.send(sendThis);
    var objectTestMap = new Map();
    var objectTest = session.on("message", function incoming(message) 
        this.send(message);
        console.log(this);
    );
    objectTestMap.set(connectionID, objectTest);
    console.log(objectTestMap.get(connectionID));
);

【问题讨论】:

【参考方案1】:

这是我连接到服务器的客户端应用程序出错。 WS 没有问题,上面的代码可以正常工作。

【讨论】:

以上是关于多个连接,但单个 websocket.on("message") 事件发射器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gsutil 将多个 csv 文件连接成一个具有单个标题的 csv 文件

如何通过JMeter将多个MQTT客户端连接到单个iothub

Impala 单个插入语句创建多个文件

Angular 1.5:多个 WebSocket 连接

具有多个连接的巨大查询与多个单个查询

在单个应用程序中打开多个 websocket 连接