目录
一、子线程创建websockets服务端接收客户端数据并存入队列
发送的消息客户端与服务端统一,多种消息加入判断的标签
服务端:web_server.py
python
import asyncio
import json
import base64
import queue
import threading
import time
import cv2
import moment
import numpy as np
import requests
import websockets
class WebServer:
def __init__(self, host, port):
self.host = host
self.port = port
self.msg_queue = queue.Queue()
self.clients = []
self.flag = True
async def echo(self, websocket, path):
client_ip, client_port = websocket.remote_address
self.clients.append(websocket)
while True:
try:
# 在这里处理收到的消息
# async for recv_text in websocket:
recv_text = await websocket.recv()
with open("aa.txt","w") as f:
f.write(recv_text)
data = json.loads(recv_text)
#if type(data) is not dict: # 判断数据
# continue
self.msg_queue.put(res)
except websockets.ConnectionClosed:
print("ConnectionClosed...", websocket.remote_address) # 链接断开
self.clients.remove(websocket)
break
except websockets.InvalidState:
print("InvalidState...", websocket.remote_address) # 无效状态
self.clients.remove(websocket)
break
except Exception as err:
print("ws:", err)
pass
def connect(self):
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()
print("连接成功!")
def run(self):
t = threading.Thread(target=self.connect)
t.start()
print("已启动!")
二、主线程内启动子线程接收并处理数据
收到消息后根据情况处理消息
主线程调用服务端:main.py
python
from web_server import WebServer
class MainThread:
def __init__(self):
self.ws = WebServer("192.168.6.28", 8000)
self.ws.run()
def run(self):
while True:
try:
data = self.ws.msg_queue.get()
# flag = data.get("flag") # 内容标签 判断是否是自己想要的内容
# if not flag:
# continue
try:
# 处理数据
print(data)
pass
except Exception as e:
print("报错:", e)
except Exception as err:
print("报错:", err)
pass
if __name__ == '__main__':
M = MainThread()
M.run()
客户端:web_client.py
客户端连接服务端,并发送消息
python
import json
import websocket
class WebClient:
def __init__(self, host, port):
self.host = host
self.port = port
self.conn = None
self.flag = False
def connect(self):
try:
url = f"ws://{self.host}:{self.port}"
self.conn = websocket.create_connection(url)
self.flag = True
except Exception as err:
self.flag = False
def close(self):
self.conn.close()
def recv(self):
data = self.conn.recv(1024)
print(data)
def send(self, data):
self.conn.send(data)
if __name__ == '__main__':
host = "192.168.6.28"
# host = "127.0.0.1"
port = 8000
ws = WebClient(host, port)
if not ws.flag:
ws.connect()
with open("bb.txt") as f:
data = f.read()
ws.send(data)