python中websockets与主线程传递参数的实现
更新时间:2024年02月22日 09:20:11 作者:Aix959
本文主要介绍了python中websockets与主线程传递参数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
一、子线程创建websockets服务端接收客户端数据并存入队列
发送的消息客户端与服务端统一,多种消息加入判断的标签
服务端:web_server.py
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
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
客户端连接服务端,并发送消息
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)
到此这篇关于python中websockets与主线程传递参数的实现的文章就介绍到这了,更多相关python websockets与主线程传递参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python使用socket高效传输视频数据帧(连续发送图片)
本文主要介绍了python使用socket高效传输视频数据帧(连续发送图片),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-10-10Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
这篇文章主要介绍了Python 将代码转换为可执行文件脱离python环境运行(步骤详解),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01新版pycharm配置运行参数的教程/pycharm2023
这篇文章主要介绍了新版pycharm配置运行参数的教程/pycharm2023,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01详解python requests中的post请求的参数问题
这篇文章主要介绍了详解python requests中的post请求的参数问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03
最新评论