如何将额外数据附加到 WebSocket 连接,以便我可以在断开连接时进行清理
How to attach extra data to a WebSocket connection so I can do clean up on disconnect
我使用 npm ws
作为我的 WebSocket 服务器使用这个实现:
const fs = require("fs");
const https = require("https");
const WebSocket = require("ws");
const server = https.createServer({
cert: fs.readFileSync("./cert.pem"),
key: fs.readFileSync("./key.pem"),
});
const wss = new WebSocket.Server({ server, clientTracking: true });
这是我的听众:
wss.on("connection", function connection(ws) {
console.log("connection");
ws.on("close", function close(ws) {
console.log("disconnect");
});
ws.on("message", function incoming(message) {
console.log("INBOUND MESSAGE: %s", message);
obj = JSON.parse(message);
switch (obj.action) { ....
我正在使用套接字服务器来设置纸牌游戏。我能够将来自 on("message
的 ws
连接附加到一个对象(例如,player[id].ws = ws
),并且我能够使用该附加数据发送消息(例如,ws.send(player[id].ws, ____);
)
我面临的挑战是当连接断开时,我需要清理玩家周围的所有游戏数据(游戏数据、玩家数据等)。但是,当 "close"
侦听器触发时,ws
数据中没有任何数据,所以我可以确定是谁删除并清理了数据?
我希望能够 on("message"
设置 ws.playerId='ksjfej
所以当我得到 ws("close"
时我可以使用 ws.playerId
来清理。
也许你没有意识到,但在 close
事件中,代表连接的 ws
变量完全在范围内,只要你错误地删除了 ws
参数从回调中声明。所以,这会起作用。
wss.on("connection", function connection(ws) {
console.log("connection");
// change this callback signature to remove the `ws`
ws.on("close", function(/* no ws here */) {
console.log("disconnect");
// you can reference the `ws` variable from a higher scope here
// you just have to remove it from the function parameter list here
// because it isn't passed to the event itself.
console.log(ws); // this will get ws from the higher scope
});
});
我使用 npm ws
作为我的 WebSocket 服务器使用这个实现:
const fs = require("fs");
const https = require("https");
const WebSocket = require("ws");
const server = https.createServer({
cert: fs.readFileSync("./cert.pem"),
key: fs.readFileSync("./key.pem"),
});
const wss = new WebSocket.Server({ server, clientTracking: true });
这是我的听众:
wss.on("connection", function connection(ws) {
console.log("connection");
ws.on("close", function close(ws) {
console.log("disconnect");
});
ws.on("message", function incoming(message) {
console.log("INBOUND MESSAGE: %s", message);
obj = JSON.parse(message);
switch (obj.action) { ....
我正在使用套接字服务器来设置纸牌游戏。我能够将来自 on("message
的 ws
连接附加到一个对象(例如,player[id].ws = ws
),并且我能够使用该附加数据发送消息(例如,ws.send(player[id].ws, ____);
)
我面临的挑战是当连接断开时,我需要清理玩家周围的所有游戏数据(游戏数据、玩家数据等)。但是,当 "close"
侦听器触发时,ws
数据中没有任何数据,所以我可以确定是谁删除并清理了数据?
我希望能够 on("message"
设置 ws.playerId='ksjfej
所以当我得到 ws("close"
时我可以使用 ws.playerId
来清理。
也许你没有意识到,但在 close
事件中,代表连接的 ws
变量完全在范围内,只要你错误地删除了 ws
参数从回调中声明。所以,这会起作用。
wss.on("connection", function connection(ws) {
console.log("connection");
// change this callback signature to remove the `ws`
ws.on("close", function(/* no ws here */) {
console.log("disconnect");
// you can reference the `ws` variable from a higher scope here
// you just have to remove it from the function parameter list here
// because it isn't passed to the event itself.
console.log(ws); // this will get ws from the higher scope
});
});