Я использую комету с tomcat 6 для передачи данных клиентам.Отключить буферизацию вывода в tomcat 6 для сервлетов комет
Я хочу получать данные до того, как соединение закроется (состояние готовности = 3 для XMLHttpRequest), и проблема в том, что tomcat 6 буферизует данные перед отправкой, так что мне нужно сделать сложные вещи, чтобы добиться этого.
Я установил тип содержимого запроса для приложения/x-javascript и типа содержимого req для приложения/xml (чтобы отключить кеш браузера).
Я использовал множество доступных опций в tomcat 6 для отключения кеша (socketBuffer = -1 в nio-коннекторе и т. Д.), И это работает в моем локальном tomcat 6 (на окнах os) (фактически, даже без изменение любого параметра по умолчанию).
Но, событие с той же конфигурацией tomcat 6, когда я развертываю приложение на сервере tomcat 6, предоставляемом http://jelastic.com, буфер вывода сервера большой, и я обязан отправлять пустые байты, чтобы запускать сброс записи записи (cf .следующий код)
byte [] bytes = new byte [event.getHttpServletResponse(). getBufferSize() - новый Gson(). toJson (messagesContent) .getBytes(). length]; event.getHttpServletResponse(). GetOutputStream(). Write (новый Gson(). ToJson (messagesContent) .getBytes()); event.getHttpServletResponse(). GetOutputStream(). Write (bytes); event.getHttpServletResponse(). GetOutputStream(). Flush();
Если я не буду писать байты в дополнение к моему содержанию данных, данные не будут отправляться клиенту. Это действительно раздражает, потому что я посылаю бесполезные пустые байты и потому, что мне нужно управлять этими пустыми байтами на клиенте. Какой ужас.
У кого-нибудь есть решение? Как отключить выходной буфер серета кометы. Мне кажется настолько очевидным, что выходной буфер должен быть отключен для сервлетов комет по умолчанию. Звучит странно.
Благодаря авансовым,
J