Событие закрытия соединения HTTP-запроса NodeJS сработало дважды - PullRequest
1 голос
/ 28 августа 2011

Я работаю над приложением AJAX в реальном времени с длительным опросом в NodeJS. Я хотел бы определить, когда пользователь закрывает вкладку с ожидающим длинным запросом. Я использую событие закрытия соединения NodeJS:

request.connection.on('close', function () {
  console.log(request.url);      
  ... 
}); 

Цикл AJAX выглядит следующим образом:

var EventLoop = new (function () {

  var self = this;

  this.listen = function () {
    $.postJSON(
      'recieve-events', 
      { /* some data not important for this issue */ }, 
      function (data) {
        ...
        self.listen();
      }
    );
  }

})();     

Вот как определяется функция postJSON:

$.extend({
  postJSON: function (url, data, callback) {
    $.ajax({
      'url': url, 
      'dataType': 'json', 
      'data': data,
      'type': 'POST', 
      'success': callback
    });
  }
});

Проблема в том, что событие закрытия соединения вызывается дважды, когда я закрываю вкладку. Может кто-нибудь объяснить мне, почему и как предотвратить такое поведение?

Я знаю, что могу использовать счетчик и вызывать функцию обратного вызова только в первый раз, но я не считаю это хорошим решением, поскольку для меня нет логического смысла закрывать что-то, что уже закрыто , (запуская событие дважды)

...