Реализация длинного опроса на сервере

я пытаюсь разработать длинный опрос на моем клиенте javascript и на моем сервере, который управляет HTTP-запросами. На сервере у меня есть рестлет, прослушивающий запрос и обрабатывающий его, на клиенте у меня есть API-интерфейс javascript, который выполняет HTTP-вызовы с объектом xmlhttprequest.

Теперь у меня есть в js setTimeOut с задержкой в ​​3 секунды, который делает опрос на сервер, в большинстве запросов я ничего не получаю, я хочу реализовать длинный опрос. Мой вопрос в том, нужно ли мне реализовать на моем сервере логику длительного опроса, мой реслет использует причал, и я бы реализовал что-то вроде «Thread.sleep», пока у меня не будет возможности отправить клиенту? либо у меня есть нативные методы в java или рестлете, которые позволяют мне обойтись без долгой реализации.

Я ценю ваши ответы!


person Kalamarico    schedule 06.06.2012    source источник
comment
вы можете увеличить свою задержку, например. с коэффициентом 2 каждый раз, когда ваш ответ пуст (таким образом, задержка станет 3/6/12/24/48/96/... секунд), а затем снова установите его на 3 секунды, когда вы что-то получите   -  person Fabrizio Calderan    schedule 06.06.2012
comment
Но в этом случае, когда я делаю 5-градусный пул и он пуст, следующий пул будет через 96 секунд?.... очень долго, поэтому я хочу заменить на длинный опрос   -  person Kalamarico    schedule 06.06.2012
comment
Если вы открыты для новых технологий: взгляните на socket.io. На стороне сервера — node.js. И он использует веб-сокеты, которые даже лучше, чем лонгполлинг, и имеют несколько запасных вариантов, если веб-сокеты недоступны.   -  person Christoph    schedule 06.06.2012
comment
websockets - хорошее решение, но в данный момент я не могу изменить свой сервер java/restlet для nodejs, но спасибо   -  person Kalamarico    schedule 06.06.2012


Ответы (1)


На самом деле, я реализовал длинный опрос, используя систему параллелизма java: wait() и notify() для java-объектов.

person Kalamarico    schedule 30.07.2012