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