python中websockets与主线程传递参数

目录

一、子线程创建websockets服务端接收客户端数据

二、主线程内启动子线程接收并处理数据

一、子线程创建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)
相关推荐
fb_1234534 分钟前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
2401_844582951 小时前
工具包:软件架构设计的实用技巧与经验分享
python
RFID固定资产管理系统1 小时前
适配媒体行业的固定资产管理软件有哪些功能与核心优势
大数据·人工智能·python·媒体
码智社1 小时前
JSON 零基础到资深全体系教程
java·json
SunnyDays10112 小时前
Python 为 PowerPoint 添加动画:进入、退出、动作路径与文本动画(详解)
python·powerpoint·动画·动画效果·文本动画
峥嵘life2 小时前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言
wgego3 小时前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-8超速判断(C++语言实现)
开发语言·数据结构·c++·算法
难以怀瑾3 小时前
pytest.param`与 allure.dynamic.title()全解析
python
机建狂魔3 小时前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex