2013-10-04 2 views
0

может быть вопрос немного вводит в заблуждение, но я объясню, что мне нужно:Java HttpServletRequest: Подождите с repsonse

  1. Если есть сервлет, который называется через AJAX/POST. Servlet получит экземпляр считывателя COM-порта, откроет COM-порт и отправит символ в порт. Все идет нормально.
  2. В «читателе портов» есть прослушиватель событий и ждет данных, поступающих из порта, и если данные доступны, они вернут эти данные.

Что я хочу сделать, так это ждать ответа от doPost сервлета до тех пор, пока данные не прибудут и не отправят эти данные в качестве ответа клиенту.

Есть идеи? Заранее спасибо.

+0

Servlet 3.0 добавляет поддержку асинхронной обработки в сервлетах. Найдите это. – Uooo

ответ

0

Я бы не стал ждать в сервлете некоторых данных, пока он не будет доступен, а затем отправьте его обратно.

Вы должны помнить, что сервлеты выполняются в собственном потоке, который сервер предоставляет из пула потоков, которым он управляет. Поэтому, если многие клиенты отправят этот запрос POST почти в одно и то же время, и ваш сервлет начнет wating, у вас может закончиться поток для вашего приложения.

Я бы сразу дал запрос POST и получил еще один запрос ajax GET, который опросил сервлет, чтобы получить данные. Вы можете использовать javascript's setInterval() для реализации опроса.

+0

Именно поэтому спецификация Servlet 3.0 добавила поддержку асинхронной обработки в Servlets: для поддержки долговременных задач в сервлете без истечения потоков. – Uooo

+0

Спасибо за ваш ответ. Существует только один клиент. Причина, по которой я не думаю об асинхронных запросах, заключается в том, что аппаратные средства взаимодействуют с этим приложением через comport и отправляют только данные, если клиент запрашивает их. Клиент должен дождаться этого конкретного ответа и отправляет дополнительные запросы на последовательный порт в зависимости от ответа на аппаратное обеспечение. Каждый раз, когда клиент/сервлет должен ждать именно этого ответа, а затем зафиксировать и закрыть запрос. Вот почему я тионк о каком-то слушателе событий. Мое решение на этот момент - запустить в цикле while, на который отвечает com-порт. –

1

Servlet 3.0 имеет asynchronous support in servlets. Таким образом, вы можете выполнять длительные задачи внутри вашего сервлета.

Однако убедитесь, что запрос вашего браузера, сделанный на сервер, остается открытым до тех пор, пока ответ не будет отправлен клиенту.

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