Сон потока в Tomcat

Я пишу приложение VXML, которое принимает входящий голосовой вызов SIP, а затем опрашивает веб-службу в приложении Java, работающем на экземпляре Tomcat на том же хост-компьютере, для входящих голосовых запросов (например, воспроизводить звуковую подсказку или собирать некоторые цифры) от отдельный канал. Эти голосовые запросы принимаются через отдельный интерфейс WS и кэшируются для сбора сеансов VXML. Голосовые запросы могут быть получены от 0,5 до 30+ секунд после принятия вызова.

По логике, сеансы VXML должны периодически опрашивать новые запросы, а приложение Java в Tomcat возвращать неблокирующий ответ, указывающий, были ли получены какие-либо запросы. Однако дополнительным ограничением, которое у меня есть, является то, что затраты ЦП на выполнение вызова веб-службы из интерпретатора VXML довольно высоки, поэтому регулярное повторение этого для больших объемов одновременных вызовов заметно повлияет на производительность системы.

Предпочтительным подходом было бы, чтобы веб-приложение блокировало опросы от приложения VXML до тех пор, пока запрос голосовой услуги не поступит в кэш (с тайм-аутом, например, 5 или 10 с). Тем не менее, я понимаю, что использование Thread.sleep в потоках сервлетов в течение длительных периодов времени - плохая идея в лучшие времена, поэтому я ищу альтернативу для достижения этого.

Это приложение должно поддерживать большие объемы одновременных сеансов на сервере (ожидается до 1000 сеансов VXML на запланированном оборудовании), поэтому простое увеличение количества потоков на Tomcat неприемлемо.

Есть ли способ заставить Tomcat отложить запрос на некоторое время, освобождая поток сервлета для других запросов? Возможно, Tomcat достаточно умен, чтобы делать это просто, когда я использую Thread.sleep? :-)

спасибо, фб


person John Rix    schedule 31.01.2011    source источник


Ответы (1)


Длительные запросы и неблокирующий ввод-вывод в Java обычно называют «кометой». Tomcat 6 поддерживает это проприетарным способом и включен в спецификацию Servlet 3.0.

См. эту статью, чтобы узнать, как сделать и то, и другое.

person skaffman    schedule 31.01.2011
comment
Спасибо, Скаффман. Я знал концепцию длинных опросов, используемую в Ajax, но не знал, что для этого есть специальный термин или что существует явная поддержка в Tomcat или Jetty. Похоже то что мне нужно! - person John Rix; 31.01.2011