[erlang-questions] Awkward timeout behavior in Cowboy Websockets

Loïc Hoguin essen@REDACTED
Wed Nov 14 12:16:09 CET 2018


The websocket_terminate/3 callback was removed in 2.0 so make sure you 
follow the correct documentation. :)

Anyway let's continue in a ticket.

Cheers,

On 11/14/18 12:12 PM, Noah Silverman wrote:
> Hi Loic,
> 
> Actually using Cowboy 2.5, and following examples examples directly from the user guide on ninenines website.
> 
> 
> 
> 
> --
> Noah
> 
> 
> 
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> On Wednesday, November 14, 2018 3:07 PM, Loïc Hoguin <essen@REDACTED> wrote:
> 
>> Sounds like you are using Cowboy 1.x, in which case it'll be simpler to
>> fork and fix directly.
>>
> 
>> Someone mentioned not too long ago that sending 1001 for timeout closes
>> might be a good idea. I'm probably OK with that, but nobody's opened a
>> ticket or PR so the idea got lost in the back of my mind.
>>
> 
>> Cheers,
>>
> 
>> On 11/14/18 3:09 AM, Noah Silverman wrote:
>>
> 
>>> Hello,
>>> When using Cowboy Websockets, I am seeing strange behavior during a timeout.
>>> As per the documentation, when upgrading a connection to websocket,
>>> there is an optional parameter for idle_timeout (defaults to 60000).
>>> This works, and the connection does close after the correct number of
>>> seconds.
>>> However, there is no timeout message sent to the client, and I don't see
>>> a way to send one.
>>> There is a websocket_terminate/3 callback.  However, the documentation
>>> seems to indicate that function is called after the connection is closed.
>>> Looking in the source code for cowboy_websocket.erl, I see on lines
>>> 417-429 the different ways to close the socket.  A "stop" and a
>>> "timeout" are handled exactly the same, with a generic close of 1000.
>>> So, no way for the client to know that idle_timeout was triggered.
>>> We have a service that streams data to a browser client.
>>>
> 
>>> -   The browser connects and requests a subscriptions to a feed
>>> -   We then stream that data continuously.
>>> -   No further action is required from the client, except a ping to keep
>>>      the connection open.
>>>      
> 
>>>
> 
>>> However, if the client doesn't ping, the connection will close
>>> silently.  There is no indication to the client that they were dropped
>>> due to timeout.
>>> Is there a way to remedy this?  Perhaps some way to have Cowboy send a
>>> "timeout message" when idle_timeout triggers?
>>> Thank You,
>>> --
>>> Noah
>>>
> 
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>
> 
>> --
>>
> 
>> Loïc Hoguin
>> https://ninenines.eu
> 

-- 
Loïc Hoguin
https://ninenines.eu



More information about the erlang-questions mailing list