Как узнать, когда клиент отключается от веб-сокета с помощью NodeJS? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть веб-сокет Node, и я пытаюсь определить, когда клиент отключается.Я попробовал следующий код для документов, но я все еще не могу определить закрытие ...

        const wss = new WebSocket.Server({
            server: this.server
        });
        this.wss = wss;
        this.wss.on('connection', function connection(ws) {
            Logger.log("verbose", `Web socket is now alive`);
            ws.isAlive = true;
            ws.on("pong", function(){
                Logger.log("verbose", `Web socket pong`);
                console.log(`the pong is ${this.isAlive} ${ws.isAlive}`);
                this.isAlive = true;
            });
        });
        setInterval(()=>{
            console.log(`Setting the interval ${wss.clients.length}`);
            wss.clients.forEach(function each(ws) {
                if (ws.isAlive === false){
                    Logger.log("verbose", `The web socket died`);
                    return ws.terminate();
                }
                ws.isAlive = false;
                ws.ping(()=>{});
            });
        }, 30000);

Однако, кажется, что wss.clients пуст, прежде чем он может быть обнаружен.Как определить фактическое закрытие соединения?

Обновление

Также пробовал событие закрытия и функцию onclose, но ни одна из них не выполняет то, что я ищу.

1 Ответ

1 голос
/ 23 сентября 2019

Вы ищете ws.on("close", function close() {...}) внутри вашего this.wss.on('connection', function connection(ws) {...}).Согласно вашему коду:

        const wss = new WebSocket.Server({
            server: this.server
        });
        this.wss = wss;
        this.wss.on('connection', function connection(ws) {
            Logger.log("verbose", `Web socket is now alive`);
            ws.isAlive = true;
            ws.on("pong", function(){
                Logger.log("verbose", `Web socket pong`);
                console.log(`the pong is ${this.isAlive} ${ws.isAlive}`);
                this.isAlive = true;
            });
            ws.on("close", function() {
                //do closing stuff here
            });
        });
        setInterval(()=>{
            console.log(`Setting the interval ${wss.clients.length}`);
            wss.clients.forEach(function each(ws) {
                if (ws.isAlive === false){
                    Logger.log("verbose", `The web socket died`);
                    return ws.terminate();
                }
                ws.isAlive = false;
                ws.ping(()=>{});
            });
        }, 30000);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...