@@ -32,6 +32,8 @@ def wshandler(request):
32
32
if ws is not resp :
33
33
ws .send_str (msg )
34
34
except WebSocketDisconnectedError :
35
+ if resp not in request .app ['sockets' ]:
36
+ return resp
35
37
request .app ['sockets' ].remove (resp )
36
38
print ('Someone disconnected.' )
37
39
for ws in request .app ['sockets' ]:
@@ -48,11 +50,23 @@ def init(loop):
48
50
handler = app .make_handler ()
49
51
srv = yield from loop .create_server (handler , '127.0.0.1' , 8080 )
50
52
print ("Server started at http://127.0.0.1:8080" )
51
- return srv , handler
53
+ return app , srv , handler
54
+
55
+
56
+ @asyncio .coroutine
57
+ def finish (app , srv , handler ):
58
+ for ws in app ['sockets' ]:
59
+ ws .close ()
60
+ app ['sockets' ].clear ()
61
+ yield from asyncio .sleep (0.1 )
62
+ srv .close ()
63
+ yield from handler .finish_connections ()
64
+ yield from srv .wait_closed ()
65
+
52
66
53
67
loop = asyncio .get_event_loop ()
54
- srv , handler = loop .run_until_complete (init (loop ))
68
+ app , srv , handler = loop .run_until_complete (init (loop ))
55
69
try :
56
70
loop .run_forever ()
57
71
except KeyboardInterrupt :
58
- loop .run_until_complete (handler . finish_connections ( ))
72
+ loop .run_until_complete (finish ( app , srv , handler ))
0 commit comments