运行 WebSocket 服务器的线程 Thread running WebSocket server
| 7 | |
| 8 | |
| 9 | class WebSocketServerThread(threading.Thread): |
| 10 | """ |
| 11 | 运行 WebSocket 服务器的线程 |
| 12 | Thread running WebSocket server |
| 13 | """ |
| 14 | |
| 15 | def __init__(self, ip, port, is_print): |
| 16 | super().__init__() |
| 17 | self._loop = None |
| 18 | self._server = None |
| 19 | self._running = False |
| 20 | self._ip = ip |
| 21 | self._port = port |
| 22 | self._is_print = is_print |
| 23 | |
| 24 | def debug(self, msg): |
| 25 | if self._is_print == "DEBUG": |
| 26 | logger.debug(msg) |
| 27 | |
| 28 | |
| 29 | async def handle_connection(self, websocket): |
| 30 | """ |
| 31 | 处理客户端连接的协程 |
| 32 | Ctrip handling client connection |
| 33 | """ |
| 34 | try: |
| 35 | |
| 36 | self.debug(f"Websocket Client connection at: <-<- {websocket.remote_address}") |
| 37 | async for message in websocket: |
| 38 | Msg = json.loads(message) |
| 39 | GlobalVariable.SocketServerClients[Msg["Data"]["Token"]] = websocket |
| 40 | |
| 41 | self.debug(f"Websocket Receive Msg: <-<- {websocket.remote_address}") |
| 42 | |
| 43 | GlobalVariable.WebsocketReceiveMessage.put(Msg) |
| 44 | await websocket.send(f"Server received: {message}") |
| 45 | except Exception as e: |
| 46 | pass |
| 47 | |
| 48 | finally: |
| 49 | del GlobalVariable.SocketServerClients[Msg["Data"]["Token"]] |
| 50 | self.debug(f"Websocket Disconnect: <-<- {websocket.remote_address}") |
| 51 | |
| 52 | |
| 53 | async def server_main(self): |
| 54 | """ |
| 55 | WebSocket 服务器主逻辑 |
| 56 | WebSocket server main logic |
| 57 | """ |
| 58 | self._running = True |
| 59 | try: |
| 60 | self._server = await websockets.serve(self.handle_connection, self._ip, self._port) |
| 61 | print(f"WebSocket Server Stared on ws://{self._ip}:{self._port}") |
| 62 | while self._running: |
| 63 | if not GlobalVariable.WebsocketCallBack.empty(): |
| 64 | item = GlobalVariable.WebsocketCallBack.get() |
| 65 | for token, client in GlobalVariable.SocketServerClients.items(): |
| 66 | if token == item['Token']: |