Мы знаем, что в Java EE servlet/jsp клиент может получить один ответ HTTP для одного HTTP-запроса. Я хочу реализовать что-то, у которого неизвестная длина ответа HTTP. Я хочу, чтобы сервер продолжал толкать данные для клиента после того, как клиент отправил первый HTTP-запрос. В этом случае я не хочу использовать AJAX, потому что AJAX довольно тяжелый.Unknow length Http Response
Например, я хочу создать веб-страницу, которая может получить сообщение журнала с веб-сервера, сообщение журнала может быть отправлено веб-сервером, когда сообщение журнала создается из другого модуля (так что в этом случае временной интервал неизвестно, мы предполагаем, что регулярная проверка таймера здесь не перечитывается). Сообщение журнала добавляется к веб-браузеру, что означает, что веб-браузер не может обновиться, например:
Журнал 12:00 pm ..... Журнал 12:03 вечера ..... Журнал 12:04 вечера. .... . . .
Как я могу это сделать, отправив только один HTTP-запрос и всегда получая ответ http?
@dystroy
ли вы имеете в виду, что я могу очистить PrintWriter несколько раз (когда есть новые данные журнала) до конца doPost/doGet?
, пожалуйста, игнорируйте синтаксическую ошибку! Я не использовал IDE.
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
PrintWriter pw = resp.getWriter();
pw.println("<html><body>Testing for the streaming.</body></html>");
pw.flush();
/*
The syntax could not be correct, please focus on logic.
This while loop check the log sent by web server is finised or not and flush the data to the
client, after that the javascript will change the content of the inner Html. Is the logic below
valid?
*/
while(!log.finish()){
pw.println("document.setInnerHtml("+log.newLog()+")");
pw.flush();
}
}
Привет, я не могу добавить код здесь, не могли бы вы помочь мне проверить код выше? Является ли это похожим на то, что вы говорите. –
Я не тестировал его, но ваш код кажется правильным. Вы попробовали это и возникли проблемы?Поскольку я пытаюсь объяснить, что этот подход работает, но не очень хорошо, особенно с плохой сетью или если вы прекратите писать в течение длительного времени. –
Я попробую, когда я вернусь домой. Кстати, должен ли я установить соединение «Keep Alive», как это было предложено другим комментатором. –