tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Finckler <>
Subject Re: non blocking Websockets?
Date Mon, 04 Jun 2012 06:32:56 GMT
thank you mark. that was a great answer.

Am 03.06.2012 22:49, schrieb Mark Thomas:
> On 03/06/2012 21:26, Christian Finckler wrote:
>> Am 03.06.2012 19:50, schrieb Mark Thomas:
>>> On 31/05/2012 18:45, Christian Finckler wrote:
>>>> Am 31.05.2012 11:09, schrieb Mark Thomas:
>>>>> On 31/05/2012 10:02, Christian Finckler wrote:
>>>>>> Hello,
>>>>>> as far I understood, the websocket implementation of tomcat is
>>>>>> using one
>>>>>> thread per client.
>>>>>> Is there also a possibility to configure it to use non blocking IO?
>>>>> No. That has not yet been implemented. It shouldn't be too hard
>>>>> provided
>>>>> that non-blocking is used between messages and blocking is used during
>>>>> messages. Obviously, the BIO connector will always use blocking.
>>> Whoops. My bad. I implemented this already. NIO and APR/native will be
>>> non-blocking between messages and have been since the first Tomcat
>>> release to include WebSocket support. Note that all connectors will
>>> block between the point the upgrade is started and the first message is
>>> sent.
>>> This was on my to-do list for a while and I simply forgot I had actually
>>> implemented. Had I looked at the code first (like I just did) it would
>>> have been clear that this was implemented.
>>> Sorry for the mis-information.
>>> Mark
>> Hello Mark,
>> you have confused me a bit. So there isn't one thread for each websocket
>> client used?
> For the BIO connector it is always one thread<==>  one connection. You
> cannot do non-blocking IO with the blocking IO connector.
> For NIO and APR/native is:
>   - as many connections as you like up to maxConnections
>   - one thread<==>  WebSocket frame
> The threads are taken from the connector's connection pool and are
> returned once the WebSocket frame has been read.
> Reads are non-blocking between frames but blocking during a frame (to
> save having track detailed state between reads)
> Writes are always blocking.
> In short, if the client isn't sending any data, Tomcat doesn't allocate
> a thread to read it. The poller monitors the connection and passes it to
> a thread when there is a message to read.
>> If not. What are the configuration possibilities for that?
> maxThreads, maxConnections on the connector just like HTTP.
>> And how to do it?
> Use the NIO or APR/native connector and it just works.
>> Perhaps you can describe more deeply how you handle websockets in regard
>> of blocking/non blocking and thread handling?
> See above. If you want more detail, look at the source code. I am not
> going to translate that into pseudo code for you.
> Mark
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message