У меня есть реализация CometProcessor, которая эффективно выполняет многоадресную передачу потенциально большому количеству клиентов. Когда происходит событие, которое необходимо распространить на всех клиентов, CometProcessor должен будет перебрать список клиентов, записывающих ответ. Если запись ответов блокируется, существует вероятность того, что потенциально медленные клиенты могут оказать неблагоприятное влияние на распространение события. Пример:
public class MyCometProcessor implements CometProcessor {
private List<Event> connections = new ArrayList<Event>();
public void onEvent(byte[] someInfo) {
synchronized (connections) {
for (Event e : connections) {
HttpServletResponse r = e.getHttpResponse();
// -- Does this line block while waiting for I/O --
r.getOutputStream().write(someInfo);
}
}
}
public void event(CometEvent event) {
switch (event.getEventType()) {
case READ:
synchronzied (connections) {
connections.add(event);
}
break;
// ...
}
}
}
Обновление : Ответ на мой вопрос. Пишет из CometProcessor блокировка:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
См. Таблицу внизу страницы.