2014-04-03 4 views
1

Попытка реализовать простой опрос Ajax без веб-сайтов или что-то еще.Долгосрочный опрос через jQuery/CDI: функция Bean требует функции sleep()

Теперь мой Аякса выглядит следующим образом:

// start simple long term polling 
(function poll(){ 
    $.ajax({ 
     url: "/app/api/ltp/receive", 
     success: function(data) { 
      // do some stuff 
     }, 
     dataType: "json", 
     complete: poll, 
     timeout: 30000 // again and again 
    }); 
})(); 

Проблема на стороне сервера:

я должен проверить очередь сообщений для новых сообщений и блокировать некоторое время, прежде чем снова проверить. Когда есть сообщение, я могу отправить json обратно клиенту, поддерживая соединение с дополнительным длинным таймаутом.

Но, как я знаю, в CDI я никогда не должен использовать Thread.sleep (ms) для блокировки, правильно? Что я могу сделать вместо этого?

+0

Почему вы хотите спать нить, как вы можете проверить периодически? –

ответ

1

Эта статья может быть полезной:

Asynchronous processing support in Servlet 3.0 доктором Xinyu Лю

Короче говоря, он объясняет, что для Ajax (Comet, Long опроса) новой поддержки асинхронной в Servlet 3.0 спецификации может быть использована для реализовать ответ с задержкой (ответ HTTP), когда на сервере появляются новые сообщения.

Вместо спящего кода код (на странице 2) использует ConcurrentLinkedQueue для хранения сообщений, а затем вызывает метод poll() для ожидания появления новых сообщений.

В этой статье также объясняется, что эта новая поддержка Async помогает сократить использование ресурсов, поскольку исходные потоки, инициирующие цикл запроса/ответа, немедленно возвращаются в пул потоков и готовы обслуживать другие задачи.

На данный момент я работаю над демонстрацией длинного опроса Ajax на основе GlassFish 4, bean (JMS) с сообщением и JavaServer Faces, поэтому я нашел ваш вопрос здесь и вернусь, если найду более полезную информацию или пример кода.

Смотрите также: I don't understand Async support in servlets 3.0 API

0

Что заставляет вас поверить, что вам нужно спать в вашем CDI-компоненте? Должна ли конечная точка реагировать на любые сообщения, получаемые ею, просматривая любую очередь сообщений, с которой вы извлекаете эти сообщения?

+0

Мне нужен долгосрочный опрос, т. Е. Кажется толкающим. Поэтому мне нужно открытое и непрерывное соединение ajax. Теперь, как мне «реагировать» без постоянной проверки буфера сообщений (используя механизм сна)? –

Смежные вопросы