python中websockets与主线程传递参数的实现

2024-03-01 0 455
目录
  • 一、子线程创建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之线程池map()方法传递多参数list
  • wxpython多线程防假死与线程间传递消息实例详解

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Python python中websockets与主线程传递参数的实现 https://www.u-9.cn/jiaoben/python/180304.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务