当前位置: 首页 > news >正文

python中websockets与主线程传递参数

目录

一、子线程创建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 websocketsclass WebServer:def __init__(self, host, port):self.host = hostself.port = portself.msg_queue = queue.Queue()self.clients = []self.flag = Trueasync def echo(self, websocket, path):client_ip, client_port = websocket.remote_addressself.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: # 判断数据#    continueself.msg_queue.put(res)except websockets.ConnectionClosed:print("ConnectionClosed...", websocket.remote_address)  # 链接断开self.clients.remove(websocket)breakexcept websockets.InvalidState:print("InvalidState...", websocket.remote_address)  # 无效状态self.clients.remove(websocket)breakexcept Exception as err:print("ws:", err)passdef 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 WebServerclass 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:#    continuetry:# 处理数据print(data)passexcept Exception as e:print("报错:", e)except Exception as err:print("报错:", err)passif __name__ == '__main__':M = MainThread()M.run()

客户端:web_client.py

客户端连接服务端,并发送消息

import jsonimport websocketclass WebClient:def __init__(self, host, port):self.host = hostself.port = portself.conn = Noneself.flag = Falsedef connect(self):try:url = f"ws://{self.host}:{self.port}"self.conn = websocket.create_connection(url)self.flag = Trueexcept Exception as err:self.flag = Falsedef 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 = 8000ws = WebClient(host, port)if not ws.flag:ws.connect()with open("bb.txt") as f:data = f.read()ws.send(data)

http://www.lryc.cn/news/304150.html

相关文章:

  • js谐音梗创意小游戏《望子成龙》
  • 第十篇:node处理404和服务器错误
  • 左右互博。
  • android通过广播打印ram使用信息
  • 内存管理——线性内存,进程空间
  • 入门Python必读的流程控制语句
  • day05-进程通信
  • 如何将OpenAI Sora生成的普通AI视频转化为Vision Pro的空间视频,沉浸式体验
  • 爬虫基础(下)
  • 【八股文面试】Java基础常见面试题总结(上)
  • c++:蓝桥杯的基础算法2(构造,模拟)+练习巩固
  • C++ 和 C#的区别
  • 2.14日学习打卡----初学Zookeeper(一)
  • SkyWalking之APM无侵入可观测原理分析
  • Missing artifact org.yaml:snakeyaml:jar:1.29
  • 三opencv源码解压及环境变量配置
  • vue实时监控视频播放的进度,并在播放80%位置触发相应操作
  • HTML+CSS滚动条样式如何单独给firefox设置 scrollbar-width: none;,而不影响其他浏览器
  • 《Go 简易速速上手小册》第2章:控制结构与函数(2024 最新版)
  • 基于EasyCVR视频汇聚系统的公安网视频联网共享视频云平台建设思路分析(一)
  • HQYJ 2024-2-21 作业
  • LeetCode每日一题【283. 移动零】
  • CF1200E Compress Words
  • ip https证书推荐
  • 大气颗粒物与VOCs PMF源解析技术应用
  • VSCODE中使用Vue3教程
  • Mac M2芯片配置PHP环境
  • [嵌入式系统-25]:RT-Thread -12- 内核组件编程接口 - 网络组件 - HTTP编程
  • 一个服务器实现本机服务互联网化
  • django配置视图并与模版进行数据交互