J'ai une implémentation CometProcessor qui effectue effectivement une multidiffusion vers un nombre potentiellement important de clients. Lorsqu'un événement qui doit être propagé à tous les clients se produit, le CometProcessor doit parcourir la liste des clients qui écrivent la réponse. Si l'écriture des réponses est bloquée, il est possible que des clients potentiellement lents puissent avoir un effet négatif sur la distribution de l'événement. Exemple:Ecrit à partir d'un Tomcat 6 CometProcessor non bloquant
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;
// ...
}
}
}
Mise à jour: répondre à ma propre question. Rédige d'un CometProcessor bloquent:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html
Voir le tableau en bas de la page.