潜在的に多数のクライアントに対してマルチキャストを効果的に実行している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
ページ下部の表を参照してください。