Hi,
I am trying to use NIO HTTP Tomcat connector 
org.apache.coyote.Http11NioProtocol to implement Comet streaming to browsers 
and mobile devices (using Tomcat org.apache.catalina.comet.CometProcessor). 
The application opens a persistent Comet connection to receive data from the 
server. 
Server then sends data to the client periodically.

My server application has several threads to send data to the clients. One 
thread is assigned a set of clients.
It will be possible that one of the clients is "slow reader" for various 
reasons. 

If I call PrintWriter.print("message") to send data to such client, the thread 
apparently may block causing all clients assigned to the thread to stop 
receiving updates.
Clearly, this is not going to fly and I need to make some changes to address it.

I am looking for 2 things:
1) I need to understand threading for Http11NioProtocol/CometProcessor. Are 
there any articles/ docs describing how it works?
Could someone point me to it?
It will help any developer using this in the future if it is properly 
documented. 
Apparently there are buffers associated with clients. There is a buffer of 
32K(?) associated with the client that causes writes to block when full (?).
Mark Thomas gave me some pointers, but I am still far from understanding the 
whole picture.

2) I need to detect if client is "slow reader". I do not see any way to do it 
besides accessing the client queue and checking its size.
Will it be possible to expose it in the Comet API? I should be able to 
configure its size and disconnect clients with queue reaching a threshold.
I suppose I can spawn a thread for each client, but this is ugly.

Any suggestions will be appreciated.
Thanks 

                                          

Reply via email to