У меня есть реализация CometProcessor, которая эффективно выполняет многоадресную передачу для потенциально большого числа клиентов. Когда происходит событие, которое необходимо распространить на всех клиентов, CometProcessor необходимо будет перебрать список клиентов, выписывающих ответ. Если записывать блок ответов, существует вероятность того, что потенциально медленные клиенты могут негативно повлиять на распределение события. Пример:Является ли запись из Tomcat 6 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;
// ...
}
}
}
Update: Отвечая на мой собственный вопрос. Пишет из CometProcessor блокируют:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
Смотрите таблицу в нижней части страницы.