On 04/07/2013 10:17, André Warnier wrote:
> To me that means that at some point, there must be on the server side a
> process or thread which is dedicated to this websocket client for as
> long as it takes, and this process/thread in the meantime is no longer
> available to process other HTTP requests.
> (That's because the basic idea is that the "websocket application" on
> the server side can keep sending messages asynchronously to the client -
> and vice-versa - so I don't see how this can work with different
> threads/processes on the server; but I'm not that smart, so it may be
> that the implementation is smarter).
> For that same reason, it would seem that the very concept of
> "load-balancing" must be suspended once the websocket connection is
> established.

The connection has to be kept open but you can use non-blocking IO to
only allocate a thread to process data when there is data to process.

The exact behaviour varies between Tomcat 7 and Tomcat 8.

BIO 7 & 8 - 1 thread per connections, blocking IO, doesn't scale

NIO / APR 7 - 1 thread per currently processed frame, non-blocking
between frames, scales better

NIO / APR 8 - threads only allocated where there is data to process,
scales best

Note that JSR356 allows blocking writes. If the client or the server opt
to send data using a blocking write then that will use a thread until
the write completes.

Load-balancers should cope perfectly happily with this.

There is no upgrade or WebSocket support in AJP yet.

Mark


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to