tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Thomas <ma...@apache.org>
Subject Re: non blocking Websockets?
Date Sun, 03 Jun 2012 20:49:48 GMT
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: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message