Как Node.js може да открие, че страната на браузъра е приключила една HTTP сесия?

Опитвам се да внедря Comet (XHR Streaming) с Node.js. Тъй като XHR Streaming кара XHR.responseText от страна на клиента да продължава да расте, необходимо е клиентската страна да затвори текущия XHR и да рестартира XHR Streaming отново.

От страната на сървъра, за всеки XHR стрийминг, обектът http.ServerResponse трябва да се задържи, докато HTTP сесията приключи.

Проблемът е: Как Node.js може да открие, че страната на браузъра е приключила една HTTP сесия?

Мислех, че в идеалния случай има един аргумент за обратно извикване на http.ServerResponse.write. Така че писането в затворена HTTP сесия ще задейства обратното извикване и ще ни уведоми, че е прекратено. Но няма такъв аргумент за обратно извикване.


person Morgan Cheng    schedule 23.02.2011    source източник


Отговори (4)


Мисля, че http://socket.io/ ще направи това, от което се нуждаете с client.on('disconnect', function(){ … })

person macarthy    schedule 23.02.2011

req.socket не изглежда да е публикувана собственост. Използвал съм:

res.connection.on('close', function() {
...  
});
person Devendra    schedule 26.04.2011

Както @macarthy вече спомена: socket.io е начинът да отидете за кометни имплементации, използвайки node.js.

Въпреки това, ако искате сами да внедрите XHR Streaming, трябва да има събитие, наречено „end“ на всеки http.ServerResponse. Това събитие се задейства веднъж на сесия без никакви аргументи, за да уведоми вашето приложение за затворен отговор.

person schaermu    schedule 23.02.2011

Винаги използвам нещо подобно..

var server = http.createServer(function(req, res) {
    req.socket.addListener("end", function() {
      ///he gone
    });
});
person Morgan ARR Allen    schedule 05.03.2011
comment
Работи ли, ако HTTP Keep-alive е включен? Една връзка със сокет може да обслужва множество http сесии. - person Morgan Cheng; 06.03.2011
comment
Не мога да кажа със сигурност, но тъй като сокетът е над http стека, мисля, че няма значение. - person Morgan ARR Allen; 06.03.2011