--- Begin Message ---Hi Sven, Thanks for your reply. I supposed that the ping/pong feature would have helped (I'm not an expert, but I found something about it on the net). Tomorrow I'm gonna try your updated runWith: and I'll feedback you.Thanks Davide Sven Van Caekenberghe-2 wrote > Hi Davide, > > First I'll explain why you see a difference in behaviour, then I'll give > you a solution. > > Network connections are expensive resources, most servers try to close > them as soon as possible when they are not used. > > Zinc HTTP Components does not normally close connections by itself, > although timeouts do naturally occur. > > The WebSocket code normally loops on the server side when timeouts occur > while waiting for incoming messages (more specifically in > ZnWebSocket>>#runWith:). Note that even though it loops, there is no > actual communication. > > Both previous facts, not closing unused connections and looping on > timeouts, result in a working echo/chat example, when run locally. > > When you put a proxy in front of this, the proxy (like nginx) might decide > to close an unused connection. This is allowed and it is what you are > seeing. This is not an error and thus normal. > > Of course, you might want to keep such connection open for longer, even if > they are not used. This can be done by keeping them alive. Note however > that this might result in many open connections. > > How do you keep a connection alive ? > > One solution is to do this at the application level. > ZnWebSocketStatusHandler does this by sending a message every second. > > The WebSocket protocol (https://tools.ietf.org/html/rfc6455) does define a > number of control messages, all which were already implemented as such. > Two of these messages, ping & pong, are meant to be used for implementing > keep alive. Client side, this was already done > (ZnWebSocket>>#handleControlFrame:). > > I now added automatic keep alive message sending server side as well. > > This can be seen in the updated implementation of ZnWebSocket>>#runWith: > > https://github.com/svenvc/zinc/commit/9073acc2fad197c2787c6cd0f4d315981ebb98b5 > > Now, whenever the read times out (as defined by the socket stream's > timeout, a Zn setting), a ping control packet is sent to keep the > connection alive, the client will answer with a pong, and then the server > loops. > > This should be sufficient to solve your issue (but both the proxy's as > well as the Zn timeout need to be compatible, Zn's needs to be smaller). > > Please let me know if this works for you. > > Regards, > > Sven > >> On 23 Feb 2020, at 18:19, Davide Varvello via Pharo-users < > pharo-users@.pharo > > wrote: >> >> >> From: Davide Varvello < > varvello@ > > >> Subject: Re: Problem with ZnWebSocket and closed connections >> Date: 23 February 2020 at 18:19:02 GMT+1 >> To: > pharo-users@.pharo >> >> >> Hi, >> >> I put nginx as a websocket proxy and I run the ZnWebSocketEchoHandler. >> Unfortunately also with this configuration the connection closes it after >> a >> couple of minutes of inactivity >> >> Cheers >> Davide >> >> >> >> -- >> Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html >> >> >> -- Sent from: http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html
--- End Message ---
Re: [Pharo-users] Problem with ZnWebSocket and closed connections
Davide Varvello via Pharo-users Mon, 24 Feb 2020 09:35:51 -0800
- [Pharo-users] Problem with ZnWebSocket and... Davide Varvello via Pharo-users
- Re: [Pharo-users] Problem with ZnWebS... Davide Varvello via Pharo-users
- Re: [Pharo-users] Problem with Zn... Sven Van Caekenberghe
- Re: [Pharo-users] Problem wit... Davide Varvello via Pharo-users
- Re: [Pharo-users] Problem wit... Davide Varvello via Pharo-users