Long polling с node.js(express)?

Пытаюсь реализовать long polling в node js. Оно работает, но криво. Проблема в том большая часть polling запросов не получают ответа от сервера. Уже голову сломал, почему не работает.

Идея такая:

На события игры вешаются прослушиватели, к коллбэку прослушивателя биндится res-объект.

Браузер держит открытым запрос, пока не получит ответ, game должен хранить прослушивателей с Res этих запросов до тех пор, пока не получит сигнал события, и не отработает callback.


Но стабильно случается такая штука: аякс запрос в браузере висит, событие прошло, но браузер не получил ответа.


game — экземпляр backbone model


Буду очень благодарен за помощь.

app.all('/game/:game_id/update', function(req, res){
    var gameId = req.param('game_id');
    var game = games.get(gameId);
    if (!game){
        res.send('No game', 404);
    }

    var client = res;
    game.on('game:endTurn game:start game:startTurn', function(){
        this.json({update: true});
        game.off(null, null, this);
    }, client);

//    //через 60 секунд сбросить
//    setTimeout(function(){
//        game.off(null, null, this);
//    }, 60000)
});
  • Вопрос задан
  • 8127 просмотров
Решения вопроса 1
@SuperKozel Автор вопроса
спасибо за ответы, похоже, это было кэширование jquery
    function gamePolling(){
        $.ajax({
            url: "/game/<%=game.id%>/update",
            dataType: 'json',
            cache: false,
            success: function(data){
                if (data.update == true){
                    window.location.reload();
                }
                else{
                    gamePolling();
                }
            },
            error: function(data, type){
                gamePolling();
            }
        });
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
nill
@nill
А почему бы тебе не попробывать socket.io?
Ответ написан
taliban
@taliban
php программист
Это, на сколько я понял, клиентский код. А может быть в серверном куске проблема? Может он вообще ничего и не шлет?
Ответ написан
Комментировать
Проверьте поведение сессий, возможно это оно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы