Я использую 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) { ....
Я использую сервер сокетов для настройки карточная игра. Я могу прикрепить соединение ws
, исходящее от on("message
, к объекту (например, player[id].ws = ws
), и я могу использовать эти прикрепленные данные для отправки сообщений (например, ws.send(player[id].ws, ____);
)
Проблема, с которой я сталкиваюсь, заключается в том, что при разрыве соединения мне нужно очистить все игровые данные, окружающие игрока (данные игры, данные игрока и т. Д. c). Однако, когда срабатывает прослушиватель "close"
, данные ws
не содержат никаких данных, поэтому я могу определить, кто сбросил и очистил данные?
Я хотел бы иметь возможность on("message"
установите ws.playerId='ksjfej
, чтобы, когда я получил ws("close"
, я мог использовать ws.playerId
для очистки.