| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import asyncio
- import json
- import threading
- import websockets
- ##
- from message_base import MessageBase
-
-
- class WebServer:
- def __init__(self, host, port, message_base: MessageBase):
- self.host = host
- self.port = port
- self.clients = []
- self.message_base = message_base
-
- async def echo(self, websocket, path):
- self.clients.append(websocket)
- client_ip, client_port = websocket.remote_address
- print(f"客户连接:{client_ip}:{client_port}")
- while True:
- try:
- recv_text = await websocket.recv()
- if recv_text:
- byte_array = bytes(recv_text.encode())
- print("ws收到", byte_array.hex())
- self.message_base.add("ws_recv", byte_array)
- send_text = self.message_base.get("ws_send")
- if send_text:
- byte_array = bytes(send_text)
- print("ws发送", byte_array.hex())
- await websocket.send(byte_array)
- # data = json.loads(recv_text)
- # device = data.get("device")
- # if device:
- # self.message_base.add(device, data)
- # else:
- # continue
- except websockets.ConnectionClosed:
- print("ConnectionClosed...") # 链接断开
- self.clients.remove(websocket)
- break
- except websockets.InvalidState:
- print("InvalidState...") # 无效状态
- self.clients.remove(websocket)
- break
- except Exception as e:
- print(e)
-
- def connect(self):
- print("连接成功!")
- asyncio.set_event_loop(asyncio.new_event_loop())
- start_server = websockets.serve(self.echo, self.host, self.port)
- asyncio.get_event_loop().run_until_complete(start_server)
- asyncio.get_event_loop().run_forever()
-
- def run(self):
- t = threading.Thread(target=self.connect)
- t.start()
- print("已启动!")
-
-
- if __name__ == '__main__':
- mb = MessageBase()
- ws = WebServer("192.168.6.28", 8001, mb)
- ws.run()
|