websocket_server.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import asyncio
  2. import json
  3. import threading
  4. import websockets
  5. ##
  6. from message_base import MessageBase
  7. class WebServer:
  8. def __init__(self, host, port, message_base: MessageBase):
  9. self.host = host
  10. self.port = port
  11. self.clients = []
  12. self.message_base = message_base
  13. async def echo(self, websocket, path):
  14. self.clients.append(websocket)
  15. client_ip, client_port = websocket.remote_address
  16. print(f"客户连接:{client_ip}:{client_port}")
  17. while True:
  18. try:
  19. recv_text = await websocket.recv()
  20. if recv_text:
  21. byte_array = bytes(recv_text.encode())
  22. print("ws收到", byte_array.hex())
  23. self.message_base.add("ws_recv", byte_array)
  24. send_text = self.message_base.get("ws_send")
  25. if send_text:
  26. byte_array = bytes(send_text)
  27. print("ws发送", byte_array.hex())
  28. await websocket.send(byte_array)
  29. # data = json.loads(recv_text)
  30. # device = data.get("device")
  31. # if device:
  32. # self.message_base.add(device, data)
  33. # else:
  34. # continue
  35. except websockets.ConnectionClosed:
  36. print("ConnectionClosed...") # 链接断开
  37. self.clients.remove(websocket)
  38. break
  39. except websockets.InvalidState:
  40. print("InvalidState...") # 无效状态
  41. self.clients.remove(websocket)
  42. break
  43. except Exception as e:
  44. print(e)
  45. def connect(self):
  46. print("连接成功!")
  47. asyncio.set_event_loop(asyncio.new_event_loop())
  48. start_server = websockets.serve(self.echo, self.host, self.port)
  49. asyncio.get_event_loop().run_until_complete(start_server)
  50. asyncio.get_event_loop().run_forever()
  51. def run(self):
  52. t = threading.Thread(target=self.connect)
  53. t.start()
  54. print("已启动!")
  55. if __name__ == '__main__':
  56. mb = MessageBase()
  57. ws = WebServer("192.168.6.28", 8001, mb)
  58. ws.run()