autobahn-python icon indicating copy to clipboard operation
autobahn-python copied to clipboard

Event Loop neither Terminates nor reconnects when connection breaks

Open blafasel42 opened this issue 4 years ago • 1 comments

Hi, I am starting using Autobahn-Python. maybe this is a noob-problem. I did the following (based on the example code):

  1. started a router
  2. started a callee process offering some rpcs
  3. started a caller, called the rpcs

all works fine.

problem: if the connection to the router goes down, the callee side shows a warning "WAMP transport was lost before closing" Then it does not terminate and also does not attempt to reconnect

I tried with both: asyncio and twisted implementations because someone said that twisted would reconnect. But also there: Error is detected and logged, but event-loop does not terminate and als no re-connect. This questions my whole concept (one weekend of work).

What does help terminating the loop is:

    async def onDisconnect(self):
        loop = asyncio.get_running_loop()
        loop.stop()

is this the way to go?

There still is a problem when initial connection to WAMP Router works but registration does not (because router is currently coming up for example). In that case, the callee system hangs forever. Is there a solution for that?

blafasel42 avatar May 01 '22 14:05 blafasel42

yes, the ApplicationRunner for Twisted has auto_reconnect, eg https://github.com/crossbario/autobahn-python/blob/master/examples/twisted/wamp/basic/client_using_apprunner.py

for a robust client, using above, auto-reconnect is managed by the ApplicationRunner. you can also handle that for yourself when using eg the WebSocket-WAMP classes directly.

one more note: you will most likely want to activate client-side initiated websocket ping/pong ("heartbeating") - in addition to also have router-side initiated hearbeating. you need both for fast detection of lost TCP connections in a WAN (such as the Internet)

oberstet avatar May 02 '22 14:05 oberstet