我有一個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;
// ...
}
}
}
更新:回答我的問題。從CometProcessor寫入卡住:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
見表格在頁面的底部。