我有一臺設備與Einaros/ws WebSocket服務器建立兩個WebSocket連接。每當第二個WebSocket連接向服務器發送消息時,只有第一個websocket.on(「message」)事件發送器會響應。沒有辦法區分消息來自哪個WebSocket,因爲似乎只有一個websocket.on(「消息」)事件發射器對象。多個連接,但單個websocket.on(「消息」)事件發射器
如何區分正在從哪個WebSocket連接接收消息而不從客戶端傳遞ID?
我很抱歉,如果我忽略了簡單的東西,我是一個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);」即使「objectTestMap」包含唯一的第二個「objectTest」,也是指第一個建立的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);
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));
});