остановить ответ сервлета - PullRequest
       1

остановить ответ сервлета

0 голосов
/ 15 сентября 2010

Я столкнулся со следующей проблемой. У меня есть сервлет, который обслуживает запрос клиента с видеоклипом. Но этот видеоклип является продуктом другого потока (транскодер). Если клип не готов к загрузке из-за того, что поток транскодера не завершил свою работу, клиентский запрос не выполняется! Любые предложения о том, как бороться с этим делом? Как я могу остановить ответ сервлета, пока транскодированный клип не будет готов потоком?

Заранее спасибо! Антонис

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

Самое простое, что можно сделать здесь, это использовать Future . Отправьте запрос транскодеру и дайте ему немедленно вернуть Future. Затем поток HTTP может заблокировать этот будущий вызов get, пока видео не будет готово.

Присоединение не кажется мне хорошим вариантом. Поток # объединяет блоки до тех пор, пока целевой поток не завершится, но подробности реализации - то, завершает ли поток после выполнения задания. Например, если транскодер будет использовать кешированный пул потоков, приложение. брейки.

2 голосов
/ 15 сентября 2010

Вы можете отложить выполнение сервлета обычными средствами (спать, ждать, присоединиться, Future # get).

В вашем случае звучит так, будто вы хотите присоединиться к Нити (или получить будущее), которая транскодирует видео.

Тем не менее, вы должны делать это только в том случае, если время, необходимое для блокировки, составляет всего несколько секунд. В противном случае клиентский браузер может истечь время ожидания запроса или пользовательский интерфейс просто плохой. Если работа по перекодировке занимает больше времени, рассмотрите возможность вывода чего-то наподобие индикатора выполнения, который продолжает опрашивать сервер до тех пор, пока задача не будет завершена, и только затем пытается загрузить видеоклип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...