Является ли запись из Tomcat 6 CometProcessor без блокировки

75
6

У меня есть реализация 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


См. таблицу внизу страницы.

спросил(а) 2008-09-20T23:36:00+04:00 11 лет, 8 месяцев назад
1
Решение
54

Tomcat6 реализация HttpServlerResponse - это класс Response. Внутри он использует CoyoteOutputStream, обернутый вокруг OutputBuffer. Как следует из названия, этот класс представляет собой буфер, размер 8k по умолчанию. Поэтому я бы сказал, по крайней мере, если вы пишете менее 8k, то вы не собираетесь блокировать. Возможно, вам понадобится очистить, хотя для ваших клиентов, чтобы увидеть данные, что означает, что в конечном счете это зависит от того, какой вариант разъема вы используете. В конфигурации Коннектора, если вы хотите неблокировать записи, укажите


protocol=org.apache.coyote.http11.Http11NioProtocol

Этот коннектор/протокол настраивается по массе:


http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

ответил(а) 2008-09-21T16:19:00+04:00 11 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема