on_close() doesn't get called after calling close() · Issue #612 · websocket-client/websocket-client (original) (raw)
code just like:
class MyWS(object): def init(self): self._ws = None def on_close(self): print("closed")
def run(self):
try:
# websocket.enableTrace(True)
self._ws = websocket.WebSocketApp(*******)
self._ws.on_close = self.on_close
self._ws.run_forever()
except Exception:
pass
After calling run()
above and connection successful, I call self._ws.close()
somewhere, But on_close()
func doesn't get called. What's wrong?
In _app.py:
def close(self, **kwargs):
"""
close websocket connection.
"""
self.keep_running = False
if self.sock:
self.sock.close(**kwargs)
self.sock = None
As above, After calling self._ws.close()
, self.keep_running
is set to False
, Then in _app.py:
class Dispatcher: def init(self, app, ping_timeout): self.app = app self.ping_timeout = ping_timeout
def read(self, sock, read_callback, check_callback):
while self.app.keep_running:
r, w, e = select.select(
(self.app.sock.sock, ), (), (), self.ping_timeout)
if r:
if not read_callback():
break
check_callback()
the while
loop in read()
func will be over according to self.keep_running
. After dispatcher.read()
, nothing is going to be done in run_forever()
func.
Is there some suggestions? Thks.