| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import asyncio
- import json
- import threading
- import websockets
- import os
- ##
- 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 = recv_text
- print("ws收到", byte_array)
- self.message_base.add("ws_recv", byte_array)
- send_text = self.message_base.get("ws_send")
- if send_text:
- byte_array = send_text
- print("ws发送", byte_array)
- 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("Err in {}[{}]:\n {}".format(os.path.basename(e.__traceback__.tb_frame.f_globals["__file__"]), e.__traceback__.tb_lineno, e))
- print("客户结束:{client_ip}:{client_port}");
-
- def connect(self):
- 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("ws服务已启动!")
-
-
- if __name__ == '__main__':
- mb = MessageBase()
- ws = WebServer("192.168.6.28", 8001, mb)
- ws.run()
|