[mod_python] TimeOut and mp_conn.read (pywebsocket)

Grisha Trubetskoy grisha at modpython.org
Mon Nov 3 18:26:38 UTC 2014


That seems weird... I'd look for other causes for this - e.g. use something
like tcpdump to see whether the TCP connection is closed from either end
when it returns?

On Mon, Nov 3, 2014 at 11:32 AM, Bram Van Steenlandt <bram at diomedia.be>
wrote:

>  Hi Grisha,
>
> ws_stream is the websocket part created by pywebsocket.
>
> In the pywebsocket code it looks like this (_stream_hixie75.py):
>
>         while True:
>             # Read 1 byte.
>             # mp_conn.read will block if no bytes are available.
>             # Timeout is controlled by TimeOut directive of Apache.
>             frame_type_str = self.receive_bytes(1)
>
> self.receive_bytes seems to use:
> read_bytes = self._request.connection.read(length)
>
> Which seems to be:
>  connection.read([*length*])
>
> Reads at most *length* bytes from the client. The read blocks
> indefinitely until there is at least one byte to read. If length is -1,
> keep reading until the socket is closed from the other end (This is known
> as EXHAUSTIVE mode in the http server code).
>
> but Timeout is 60 in apache and the function returns after 1 second if
> there are no bytes to receive.
>
> Bram
> op 03-11-14 16:59, Grisha Trubetskoy schreef:
>
>
>  Bram
>
>  What is ws_stream?
>
>
>  Grisha
>
> On Mon, Nov 3, 2014 at 9:24 AM, Bram Van Steenlandt <bram at diomedia.be>
> wrote:
>
>> Hi all,
>>
>> I've developed a websocket application using mod_python and pywebsocket.
>> It works but I have a problem (I'm using apache22 and mod_python 3.3.1
>> and python 2.6.6).
>>
>> I'm using request.ws_stream.receive_message() to see if there are
>> messages from the client,
>> this works but always takes one second (between 0.99 and 1.05), I need
>> it to return faster (esp. when there is no message most of the time).
>>
>> This is suppose to be controlled by the TimeOut config value in apache
>> but this is set to 60... (req.server.timeout is also 60)
>> I would think that the function returns after 60 seconds and not 1 when
>> there is no data, is there another timeout I'm missing ?
>>
>> Can someone point me in the right direction ?
>> I there a way to set this from inside handler like with regular sockets ?
>>
>> The pywebsocket package does include a way to work with a
>> messagereceiver (here receiving is done in a thread),
>> this works but it's difficult to debug, I think I would prefer a shorter
>> timeout.
>>
>> Thx
>>
>>
>> _______________________________________________
>> mod_python mailing list
>> mod_python at modpython.org
>> http://mailman.modpython.org/mailman/listinfo/mod_python
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.modpython.org/pipermail/mod_python/attachments/20141103/84540e7a/attachment.html>


More information about the mod_python mailing list