Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. import asyncio
  2.  
  3. from sanic import Sanic
  4. from sanic.websocket import ConnectionClosed
  5.  
  6.  
  7. app = Sanic(__name__)
  8.  
  9. ws_clients = set()
  10.  
  11.  
  12. async def broadcast(message):
  13. global ws_clients
  14. broadcasts = [ws.send(message) for ws in ws_clients]
  15. for result in asyncio.as_completed(broadcasts):
  16. try:
  17. await result
  18. except ConnectionClosed:
  19. pass
  20.  
  21.  
  22. @app.websocket("/ws")
  23. async def websocket(_, ws):
  24. global ws_clients
  25. ws_clients.add(ws)
  26. print(f'{len(ws_clients)} clients')
  27. while True:
  28. try:
  29. message = await ws.recv()
  30. except ConnectionClosed:
  31. ws_clients.remove(ws)
  32. print(f'{len(ws_clients)} clients')
  33. break
  34. except:
  35. print('yelp')
  36. else:
  37. await broadcast(message)
  38.  
  39.  
  40. if __name__ == '__main__':
  41. app.run(host="0.0.0.0", port=8000, debug=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement