[mod_python] TimeOut and mp_conn.read (pywebsocket)

Bram Van Steenlandt bram at diomedia.be
Mon Nov 3 19:07:00 UTC 2014


Hi,

The connection remains open for many hours at a time.

it's something like:
while True:
     msg = request.ws_stream.receive_message()
     if msg=="SOMETHING":
         do other stuff, the client has asked something, maybe send a 
json string to the client, maybe send a command to another program

Thx for your input
Bram


op 03-11-14 19:26, Grisha Trubetskoy schreef:
> 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 
> <mailto: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 <mailto: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 <mailto: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/25ce06ba/attachment-0001.html>


More information about the mod_python mailing list