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

8.flask+websocket

http是短连接,无状态的。

websocket是长连接,有状态的。

flask中使用websocket

from flask import Flask, request
import asyncio
import json
import time
import websockets
from threading import Thread
from urllib.parse import urlparse, parse_qs
from functools import partialapp = Flask(__name__)# 存储所有的WS客户端对象
# websocketClient_list = []
userId_websocketClient = dict()async def send_message(message):# while True:#     if websocketClient_list:#         message = json.dumps({"time": str(time.time())}, ensure_ascii=False)#         await asyncio.wait([client.send(message) for client in websocketClient_list])#     await asyncio.sleep(1)# message = json.dumps({"time": str(time.time())}, ensure_ascii=False)# await asyncio.wait([client.send(message) for client in websocketClient_list])client = userId_websocketClient.get('1')if client:await asyncio.wait([client.send(message)])async def websocket_handler(websocket, path):parsed_url = urlparse(path)query_params = parse_qs(parsed_url.query)# 访问参数user_id = query_params.get('userId')user_id = user_id[0] if user_id[0] else Noneif user_id:userId_websocketClient[user_id] = websocket# websocketClient_list.append(websocket)try:async for message in websocket:print(f"客户端发来消息:{message}")except websockets.ConnectionClosed:print("websocket closed")finally:# websocketClient_list.remove(websocket)del userId_websocketClient[user_id]@app.route("/framework/pushMessage/framework_czc")
def index():return "WebSocket server is running. Connect to ws://<server-address>:8001/websocket"@app.route("/send/message")
def sendMessage():message = "xxxxxx"# 创建带有参数的协程对象coro = partial(send_message, message)asyncio.set_event_loop(asyncio.new_event_loop())loop = asyncio.get_event_loop()loop.run_until_complete(coro())loop.close()return "success"def run_websocket_server():asyncio.set_event_loop(asyncio.new_event_loop())start_server = websockets.serve(websocket_handler, "0.0.0.0", 8001)asyncio.get_event_loop().run_until_complete(start_server)# asyncio.get_event_loop().run_until_complete(send_message())asyncio.get_event_loop().run_forever()if __name__ == '__main__':websocket_thread = Thread(target=run_websocket_server)websocket_thread.start()app.run(host="0.0.0.0", port=8000)
http://www.lryc.cn/news/535712.html

相关文章:

  • ARM Cortex-M3/M4 权威指南 笔记【二】架构
  • HCIA项目实践--静态路由的拓展配置
  • STL中list的模拟实现
  • 计算机网络知识速记:HTTP1.0和HTTP1.1
  • Apache Kafka 中的认证、鉴权原理与应用
  • DeepSeek自然语言处理(NLP)基础与实践
  • 激光工控机在精密制造中的应用与优势
  • Docker换源加速(更换镜像源)详细教程(2025.2最新可用镜像,全网最详细)
  • 12.14 算法练习
  • ASP.NET Core SignalR的分布式部署
  • Express 中间件
  • ABB能源自动化选用宏集Cogent DataHub避免DCOM问题,实现高效、安全的数据传输
  • springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)
  • 【Elasticsearch】分析器的构成
  • Python 调用 Azure OpenAI API
  • 数据结构 算法时间复杂度和空间复杂度
  • CNN-BiGRU卷积神经网络双向门控循环单元多变量多步预测,光伏功率预测
  • 钉钉位置偏移解决,钉钉虚拟定位打卡
  • 【面试集锦】如何设计SSO方案?和OAuth有什么区别?
  • Python 基于 OpenCV 的人脸识别上课考勤系统(附源码,部署教程)
  • vcredist_x64.exe 是 Microsoft Visual C++ Redistributable 的 64 位版本
  • Tailwind CSS 的核心理念
  • 集成学习(二):从理论到实战(附代码)
  • HTML 链接
  • 【机器学习】数据预处理之scikit-learn的Scaler与自定义Scaler类进行数据归一化
  • android的第一个app项目(java版)
  • 上位机知识篇---SSHSCP密钥与密钥对
  • 智慧物流新引擎:ARM架构工控机在自动化生产线中的应用
  • [MySQL]2-MySQL索引
  • DeepSeek冲击下,奥特曼刚刚给出对AGI的「三个观察」,包括成本速降