Событие Nodejs при выходе из страницы

#javascript #node.js #express

#javascript #node.js #выразить

Вопрос:

Я очень новичок в NodeJS и ExpressJS, но мне было интересно, есть ли событие, которое срабатывает при оставлении страницы. У меня есть приложение ExpressJS / NodeJS, и в app.js я настроил прослушиватель UDP на определенной странице; т.е.

 app.get('/sims', function(req, res) {

    var udp = require('dgram');
    var udpSocket = udp.createSocket('udp4');
    udpSocket.bind(8081);

    udpSocket.on("error", function (err) {
        console.log("server error:n"   err.stack);
        udpSocket.close();
    });

    udpSocket.on("message", function (msg, rinfo) {
        console.log("server got: "   msg   " from "  
              rinfo.address   ":"   rinfo.port);
        //do stuff with the message to dynamically update the page
    });

    udpSocket.on("listening", function () {
        var address = udpSocket.address();
        console.log("server listening "  
             address.address   ":"   address.port);
    });

    udpSocket.on("close", function () {
        console.log("udp socket closed!!!");
    });
});
  

Мой вопрос в том, как мне узнать, когда закрывать UdpSocket? Я не могу закрыть его в рамках app.get, и, похоже, он не закрывается автоматически, когда я покидаю страницу. Я не хочу просто оставлять кучу UDP-сокетов открытыми каждый раз, когда кто-то посещает страницу.

Ответ №1:

Проблема в том, что HTTP не является двунаправленным, поэтому существует только один «способ» отправки данных (с сервера клиенту).

Итак, я думаю, вы либо добавляете механизм тайм-аута (закрываете сокет, если за время X сообщение не было отправлено), либо смотрите на websockets (которые допускают двунаправленную связь). Я предлагаю посмотреть на socket.io , Primus, движок.ввод-вывод или google «node websocket» 😉

Комментарии:

1. Хорошо; я думаю, что в контексте моего приложения я действительно могу заставить сервер отправить какое-то «завершенное» сообщение, а не механизм тайм-аута. Это позволит клиенту узнать, что выполняется динамическое обновление, и может закрыть сокет. Спасибо!