Нить спать в Tomcat - PullRequest
       28

Нить спать в Tomcat

1 голос
/ 31 января 2011

Я пишу приложение 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?: -)

Спасибо, фб

1 Ответ

1 голос
/ 31 января 2011

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

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

...