当前位置: 首页 > 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)

相关文章:

8.flask+websocket

http是短连接&#xff0c;无状态的。 websocket是长连接&#xff0c;有状态的。 flask中使用websocket from flask import Flask, request import asyncio import json import time import websockets from threading import Thread from urllib.parse import urlparse, pars…...

ARM Cortex-M3/M4 权威指南 笔记【二】架构

一、架构 1.1 架构简介 Cortex-M3/M4 处理器都基于 ARMv7-M 架构。最初的 ARMv7-M 架构是随着 Cortex-M3 处理器一同引入的&#xff0c;而在 Cortex-M4 发布时&#xff0c;架构中又额外增加了新的指令和特性&#xff0c;改进后的架构有时也被称为 ARMV7E-M。要了解 ARM7-M 和…...

HCIA项目实践--静态路由的拓展配置

7.7 静态路由的拓展配置 网络中的两个重要思想&#xff1a; &#xff08;1&#xff09; 实的不行来虚的&#xff1b; &#xff08;2&#xff09; 范围太大&#xff0c;划分范围。&#xff08;分治&#xff09; 7.7.1 负载均衡 &#xff08;1&#xff09;定义 负载均衡是一种网…...

STL中list的模拟实现

文章目录 1. 前言and框架2. 相对完整的框架3. 模拟实现接口1. 迭代器的引入2. 迭代器的区分list迭代器迭代器的构造list迭代器的实现模拟指针解引用前置和前置--后置和--迭代器&#xff01;迭代器-> list的const迭代器迭代器模板迭代器是否需要析构&#xff0c;拷贝构造&…...

计算机网络知识速记:HTTP1.0和HTTP1.1

计算机网络知识速记&#xff1a;HTTP1.0和HTTP1.1 1. 基本概念 1.1 HTTP1.0 HTTP1.0是1996年发布的第一个正式版本&#xff0c;主要用于客户端与服务器之间的简单请求和响应交互。它的设计理念相对简单&#xff0c;适合处理一些基本的网页服务。 1.2 HTTP1.1 HTTP1.1是HTT…...

Apache Kafka 中的认证、鉴权原理与应用

编辑导读&#xff1a;本篇内容将进一步介绍 Kafka 中的认证、鉴权等概念。AutoMQ 是与 Apache Kafka 100% 完全兼容的新一代 Kafka&#xff0c;可以帮助用户降低 90%以上的 Kafka 成本并且进行极速地自动弹性。作为 Kafka 生态的忠实拥护者&#xff0c;我们也会持续致力于传播 …...

DeepSeek自然语言处理(NLP)基础与实践

自然语言处理(Natural Language Processing, NLP)是人工智能领域的一个重要分支,专注于让计算机理解、生成和处理人类语言。NLP技术广泛应用于机器翻译、情感分析、文本分类、问答系统等场景。DeepSeek提供了强大的工具和API,帮助我们高效地构建和训练NLP模型。本文将详细介…...

激光工控机在精密制造中的应用与优势

在精密制造中&#xff0c;激光工控机可以用于许多场景例如 激光切割与雕刻&#xff1a;用于金属、塑料、陶瓷等材料的精密切割和雕刻&#xff0c;适用于汽车、航空航天、电子等行业&#xff1b;可实现复杂图案和高精度加工&#xff0c;满足微米级精度要求。 激光焊接&#xf…...

Docker换源加速(更换镜像源)详细教程(2025.2最新可用镜像,全网最详细)

文章目录 前言可用镜像源汇总换源方法1-临时换源换源方法2-永久换源&#xff08;推荐&#xff09;常见问题及对应解决方案1.换源后&#xff0c;可以成功pull&#xff0c;但是search会出错 补充1.如何测试镜像源是否可用2.Docker内的Linux换源教程 换源速通版&#xff08;可以直…...

12.14 算法练习

1. 每日温度 算法思路 1. 单调栈的作用&#xff1a;记录我们遍历过的元素&#xff0c;与当前的元素方便对比&#xff0c;本质是以空间换时间&#xff1b; 2. 比较当前元素与栈顶元素的大小&#xff0c;当当前元素大于栈顶元素时&#xff0c;持续弹出栈顶元素下标&#xff0c;…...

ASP.NET Core SignalR的分布式部署

假设聊天室程序被部署在两台服务器上&#xff0c;客户端1、2连接到了服务器A上的ChatRoomHub&#xff0c;客户端3、4连接到服务器B上的ChatRoomHub&#xff0c;那么客户端1发送群聊消息时&#xff0c;只有客户端1、2能够收到&#xff0c;客户端3、4收不到&#xff1b;在客户端3…...

Express 中间件

在构建 Web 应用程序时&#xff0c;中间件&#xff08;Middleware&#xff09;扮演着至关重要的角色。它允许你定义一系列的函数来处理 HTTP 请求和响应过程中的各种任务。Express.js 是 Node.js 上最流行的框架之一&#xff0c;以其简洁且强大的中间件机制著称。本文将深入探讨…...

ABB能源自动化选用宏集Cogent DataHub避免DCOM问题,实现高效、安全的数据传输

案例概况 ABB能源自动化公司通过宏集Cogent DataHub软件将电厂设施的数据实时传输到公司办公室&#xff0c;实现了OPC隧道/镜像解决方案&#xff0c;在电厂和公司网络之间建立了一个安全、可靠的连接&#xff0c;确保数据传输的高度安全&#xff0c;减少入侵风险。 &#xff0…...

springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…...

【Elasticsearch】分析器的构成

在Elasticsearch中&#xff0c;分析器&#xff08;Analyzer&#xff09;是一个处理文本数据的管道&#xff0c;它将输入的文本转换为一系列词元&#xff08;tokens&#xff09;&#xff0c;并可以对这些词元进行进一步的处理和规范化。分析器由以下三个主要组件构成&#xff1a…...

Python 调用 Azure OpenAI API

在人工智能和机器学习快速发展的今天,Azure OpenAI 服务为开发者提供了强大的工具来集成先进的 AI 能力到他们的应用中。本文将指导您如何使用 Python 调用 Azure OpenAI API,特别是使用 GPT-4 模型进行对话生成。 准备工作 在开始之前,请确保您已经: 拥有一个 Azure 账户…...

数据结构 算法时间复杂度和空间复杂度

一、算法好坏的度量 【事前分析法】 算法设计好后&#xff0c;根据算法的设计原理&#xff0c;只要问题规模确定&#xff0c;算法中基本语句执⾏次数和需求资源个数 基本也就确定了。 ⽐如求1 2 3 ... n − 1 n &#xff0c;可以设计三种算法&#xff1a; 算法A&#xff…...

CNN-BiGRU卷积神经网络双向门控循环单元多变量多步预测,光伏功率预测

CNN-BiGRU卷积神经网络双向门控循环单元多变量多步预测&#xff0c;光伏功率预测 代码下载&#xff1a;CNN-BiGRU卷积神经网络双向门控循环单元多变量多步预测&#xff0c;光伏功率预测 一、引言 1.1、研究背景及意义 随着全球能源危机和环境问题的日益严重&#xff0c;可再…...

钉钉位置偏移解决,钉钉虚拟定位打卡

虚拟定位打卡工具 一&#xff0c;介绍免费获取工具 一&#xff0c;介绍 提到上班打卡&#xff0c;职场人的内心戏估计能拍成一部连续剧。打卡&#xff0c;这俩字仿佛自带“紧箍咒”&#xff0c;让无数打工人又爱又恨。想象一下&#xff0c;你气喘吁吁地冲进办公室&#xff0c;…...

【面试集锦】如何设计SSO方案?和OAuth有什么区别?

如何设计SSO方案?和OAuth有什么区别?--楼兰 带你聊最纯粹的Java ​ 如果面试问你,你会做一个权限系统吗?那你肯定会说做过。不就是各种登录、验证吗。我做的第一个CRUD应用就是注册、登录。简单!但是,如果问你在工作中真的做过权限系统吗?其实很多人都只能默默摇摇头。因…...

OpenClaw-Zulip桥接器:实现AI Agent与团队协作工具的无缝集成

1. 项目概述&#xff1a;一个为AI Agent打造的Zulip消息桥梁如果你正在构建一个基于OpenClaw的AI Agent系统&#xff0c;并且你的团队恰好使用Zulip作为内部沟通工具&#xff0c;那么你很可能面临一个痛点&#xff1a;如何让Agent无缝地融入团队的日常对话流&#xff1f;是让团…...

惠普OMEN游戏本性能优化终极指南:如何用开源工具彻底释放硬件潜力

惠普OMEN游戏本性能优化终极指南&#xff1a;如何用开源工具彻底释放硬件潜力 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为惠普OMEN游戏本官方软…...

9.5 点云采样——拓扑采样

图9-5-1 PointNet++中的邻域特征聚合的拓扑采样过程 拓扑/图结构采样的核心思想是“基于点云的局部拓扑关系(如K近邻、聚类)”进行采样,通过构建点云的拓扑图或聚类结构,选取每个局部区域的代表点,实现“局部保特征、全局均匀”的采样效果。 (1)出处 &n...

手机数据导出

在数字信息爆炸的时代&#xff0c;手机早已不仅是通讯工具&#xff0c;更是承载个人记忆、工作文件与生活轨迹的“数字器官”。然而&#xff0c;当意外发生——误删、系统崩溃、硬件损坏——手机数据导出便成为一项技术性极高、且充满情感救赎价值的系统工程。本文将围绕手机数…...

v7上线首周,93%老用户没发现的隐藏指令——高阶提示工程实战手册,含12个未公开参数调用语法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney v7核心架构升级与隐性能力图谱 多模态融合推理引擎重构 Midjourney v7 引入了基于分层注意力对齐&#xff08;Hierarchical Attention Alignment, HAA&#xff09;的新型生成主干&#xff…...

AI应用着陆页模板:快速构建专业产品门户的实战指南

1. 项目概述&#xff1a;一个面向AI应用落地的着陆页模板 最近在折腾AI应用开发的朋友&#xff0c;估计都遇到过同一个问题&#xff1a;模型和算法好不容易调好了&#xff0c;后端API也搭起来了&#xff0c;但一到“怎么让用户用起来”这一步&#xff0c;就卡壳了。尤其是那个…...

芯片入门必看:CPU、MCU、SoC、GPU、TPU、NPU

本文首先介绍了芯片的基础分类&#xff0c;包括模拟/数字芯片和逻辑/计算芯片。接着&#xff0c;对8类核心芯片进行了通俗解析&#xff0c;包括CPU、MCU、SoC、GPU、TPU、NPU、FPGA和DSP&#xff0c;涵盖了它们的定义、用途、类型和代表性标的。最后&#xff0c;文章从通用性和…...

企业内网应用如何安全合规地集成外部大模型API服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业内网应用如何安全合规地集成外部大模型API服务 在构建内部AI工具时&#xff0c;企业开发团队面临一个核心挑战&#xff1a;如何…...

初创公司如何借助Taotoken控制大模型API试用与正式成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创公司如何借助Taotoken控制大模型API试用与正式成本 对于初创公司而言&#xff0c;在产品从原型验证到正式上线的过程中&#x…...

独立开发者利用Taotoken统一API开发跨模型内容生成应用案例

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者利用Taotoken统一API开发跨模型内容生成应用案例 应用场景类&#xff0c;一位独立开发者希望构建一个能同时调用多种大模…...