FastAPI 使用 WebSocket创建实时应用程序

2023-10-26

超文本传输协议(或 HTTP)是当今互联网上最常用的协议之一。 它允许客户端获取资源,例如 HTML 页面和图像。

客户端(通常是浏览器)向服务器请求资源(图像、CSS 文件等),服务器响应请求的数据。它是一个严格的单向协议。服务器只会在客户端请求时发送数据。

打开一个连接,请求你想要的东西,等待响应,然后关闭连接。 这就是 HTTP 的基础。 当您处理文档时,它工作正常。 但是,当涉及到更多“实时”应用程序(例如游戏和聊天)时,您开始遇到这种方法的一些问题。

由于当资源发生变化时,服务器无法向客户端发送消息,因此客户端将不得不不断向服务器询问资源数据。 它浪费资源,因为为所有请求创建了一个新连接,即使可能没有任何更改。 这种方法称为轮询,虽然有一些方法可以将其最小化(例如长轮询),但它们只是解决问题的方法。

网络套接字

这就是 WebSocket 的想法诞生的地方。它允许 TCP 连接保持活动状态,因此服务器和客户端都可以相互发送数据,而无需每次都创建新连接。

它使用 HTTP 作为初始传输机制,但“升级”了连接。然后创建一个双向、全双工通信通道。

FastAPI

FastAPI 是一个非常酷的开源框架,可以使用 Python 构建 API。它的语法类似于 Flask,所以如果你使用它,你应该不会有任何学习上的困难。

它比 Flask 有一些优势,例如:

  • 它很快(与 Flask 相比);

  • 它有自动文档(OpenAPI);

  • 它可以使用 async 函数;

  • 支持websocket;

  • 更多

示例

在本教程中,我们将创建一个使用 WebSocket 连接更新图表的简单应用程序。

我们将使用的软件包:

完整代码

服务器
客户端

本文完整代码

详情参阅 - 亚图跨际

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastAPI 使用 WebSocket创建实时应用程序 的相关文章

  • “NoneType”对象不可订阅?

    list1 name1 info1 10 list2 name2 info2 30 list3 name3 info3 50 MASTERLIST list1 list2 list3 def printer lst print Availa
  • 日期/时间值的 Django URL 转换器

    我正在尝试使用 Django 内置的 URL 转换器将 URL 中的日期时间字符串转换为视图中的日期对象 如果我手动输入 URL 它们会按预期工作 但尝试为其生成 URL 时找不到匹配项 我的转换器很简单 from django utils
  • Django/gevent socket.IO 与 redis pubsub。我把东西放在哪里?

    我有一个独立的 python 脚本 它只是从 Twitter 的流 API 捕获数据 然后在收到每条消息时 使用 redis pubsub 将其发布到频道 tweets 这是该脚本 def main username username pa
  • Python:如何删除圆括号内的文本?

    我试过了 但没用 return re sub myResultStats text 建议 thanks 尝试这个 return re sub myResultStats text 括号表示捕获组 因此您必须转义它们
  • 识别 Windows 版本

    我正在编写一个打印出详细 Windows 版本信息的函数 输出可能是这样的元组 32bit XP Professional SP3 English 它将支持 Windows XP 及更高版本 我一直坚持获取 Windows 版本 例如 专业
  • 使用 Flask 时在 Python 中实现持久数据库连接的最佳实践

    我的问题是关于在生产环境或其他关注性能的环境中使用 Flask 时处理数据库连接的推荐方法 在 Flask 中 g 对象可用于存储内容 并且可以将打开的数据库连接放置在那里 以允许应用程序在同一请求期间的后续数据库查询中重用它们 但是 g
  • 从 SQL Server 中调用 Python 文件

    我的文件名中有 Python 脚本 C Python HL py 在此 Python 脚本中 有预测模型以及对 SQL 数据库中某些表的更新 我想将此文件称为 SQL 作业 我怎样才能做到这一点 这个问题不一样 如何在 SQL Server
  • Django url 模式 - 带正斜杠的参数

    如何为两个参数创建 url 模式 其中第一个参数包含正斜杠作为其内容的一部分 da ta1 data2 最初我有以下模式 r view P
  • 通过 Python 在 PostgreSQL 中的 unicode 字符串中是否允许空字节?

    unicode 字符串中是否允许空字节 我不问 utf8 我的意思是 unicode 字符串的高级对象表示 背景 我们通过 Python 在 PostgreSQL 中存储包含空字节的 unicode 字符串 如果我们再次读取字符串 字符串会
  • python中的语音识别持续时间设置问题

    我有一个 Wav 格式的音频文件 我想转录 我的代码是 import speech recognition as sr harvard sr AudioFile speech file wav with harvard as source
  • 如何将 Jinja 与 Twisted 一起使用?

    我正在计划使用 Python 与 Twisted Storm 和 Jinja 一起开发一个讨论软件 问题是 Jinja 不是为 Twisted 或异步套接字库而设计的 并且使用 Twisted 提供的性能是我不打算使用 Flask 的原因
  • 为 Keras 编写自定义数据生成器

    我将每个数据点存储在 npy 文件中 其中shape 1024 7 8 我想通过类似的方式将它们加载到 Keras 模型中ImageDataGenerator 所以我编写并尝试了不同的自定义生成器 但它们都不起作用 这是我改编的一个this
  • 可变和不可变类变量如何初始化?

    运行下面的示例代码 class S i 0 a def init self self i 1 self a append 1 s1 S print s1 i s1 a s2 S print s2 i s2 a 输出将是 1 1 1 1 1
  • 包装 C++ Qt 小部件以便在 Python 中与 PySide 一起使用

    在 Python 中使用自定义 Qt 显示小部件包装自定义 C 库以便在基于 PySide 的 QApplication 中使用的最佳方法是什么 C 库是否需要特殊处理才能使用 SWIG 进行包装 封装的 Qt 小部件能否与 PySide
  • captureWarnings 设置为 True 不会捕获警告

    我想记录所有警告 我以为这样的设定captureWarnings to True应该可以解决问题 但事实并非如此 代码 import logging import warnings from logging handlers import
  • Windows 10 上的 Tensorflow 安装问题

    我正在尝试在 Win 10 计算机上安装 Tensorflow 我成功安装了Python 3 7 然后尝试按照tensorflow org上的安装说明进行操作 执行时 pip install tensorflow 我收到以下错误消息 错误
  • 使用 boto3 将 csv 文件保存到 s3

    我正在尝试写入 CSV 文件并将其保存到 s3 中的特定文件夹 存在 这是我的代码 from io import BytesIO import pandas as pd import boto3 s3 boto3 resource s3 d
  • 矩阵求逆 (3,3) python - 硬编码与 numpy.linalg.inv

    对于大量矩阵 我需要计算定义为的距离度量 尽管我确实知道强烈建议不要使用矩阵求逆 但我没有找到解决方法 因此 我尝试通过对矩阵求逆进行硬编码来提高性能 因为所有矩阵的大小均为 3 3 我预计这至少会是一个微小的改进 但事实并非如此 为什么
  • 继承自 NumPy 数组的类如何更改其自身的值?

    我有一个继承自 NumPy n 维数组的简单类 我想要该类的两个方法可以更改该类实例的数组值 其中一种方法应将类实例的数组设置为类实例的列表数据属性的值 另一种方法应将一些列表值附加到类实例的数组中 我不确定如何实现这一点 但我的尝试如下
  • 张量流多元线性回归不收敛

    我正在尝试使用张量流训练具有正则化的多元线性回归模型 由于某种原因 我无法获取以下代码的训练部分来计算我想要用于梯度下降更新的误差 我在设置图表时做错了什么吗 def normalize data matrix averages np av

随机推荐

  • Ubuntu 20.04 开启SSH服务

    更新软件下载源 sudo apt update 安装ssh服务 sudo apt install openssh server 开启防火墙ssh的服务端口 sudo ufw allow ssh 附 还可以查看或更改ssh服务的状态 查看ss
  • Javaweb实现增删改查操作操作

    Javaweb实现增删改查操作操作 一 准备工作 1 Idea编辑器 eclispe和myeclispe都可以 个人推荐使用idea 新建一个web项目 2 数据库mysql 3 需要提前了解的知识点 servlet el和jstl表达式
  • 怎么检测两张照片的相似度,两张图片相似度测试

    计算图像相似度的算法有哪些 SIM StructuralSIMilarity 结构相似性 这是一种用来评测图像质量的一种方法 由于人类视觉很容易从图像中抽取出结构信息 因此计算两幅图像结构信息的相似性就可以用来作为一种检测图像质量的好坏 首
  • 服务器盘符名称修改,linux下powerpath对盘与更改盘符名的教程

    PowerPath 软件在服务器上运行并管理服务器和存储系统中的虚拟磁盘之间的路径 如果一条路径出现故障 它可以将I O 转发到有效路径中 并提供负载平衡来平均分配各条路径中的I O 负载 另外这里的路径由HBA 硬件和驱动程序 光纤 两个
  • docker web mysql_在 Docker 中完整部署 Web 应用

    原标题 在 Docker 中完整部署 Web 应用 一个完整的 Web 应用包含前端页面 数据库 后台逻辑等 按照一般流程去构建需要配置 Nginx MySQL 以及后台服务器 运维涉及到的部分十分复杂 而 Docker 可以将这些东西 数
  • STM8 学习笔记13:PWM

    PWM Gitee 空间跳转 https gitee com galoc stm8 git 1 概述 PWM也叫脉冲宽度调制 是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术 频率 周期 占空比 1 1 PWM 频率 是指在
  • Java常用类System类、Math、BigInteger 和 BigDecimal

    1 System类 public void test1 String javaVersion System getProperty java version System out println java的version javaVersi
  • Windows磁盘管理中的压缩卷操作

    基本磁盘 主分区在压缩卷操作后为黑色的未分配 逻辑分区在压缩卷操作后为绿色的可用空间 动态磁盘 简单卷在压缩卷操作后为黑色的未分配
  • Figma怎么汉化?这个Figma 汉化插件早知道就好了!

    Figma官方目前没有中文版 可能与早期的封禁大疆事件和面向非洲地区扩张策略有关 但是可以使用第三方汉化插件来获得中文版本的Figma Figma cool是一个提供汉化插件的网站 支持多个平台 另外 还有一款名为即时设计的中文设计工具 提
  • java.lang.IllegalArgumentException 异常报错完美解决

    目录 修改JDK使用版本 修改开发工具idea配置 eclipse的直接跳过这个看下面 修改开发工具eclipse配置 学习spring依赖注入的时候碰到这个坑 折腾了许久 记录一下以防其他小伙伴入坑 该异常主要原因是因为JDK与Sprin
  • Lisp-Stat 翻译 —— 第四章 其它Lisp特性

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 第四章 其它Lisp特性 上一章介绍了Lisp编程的基础 在那章里重点展示了对编写Lisp函数有用的编程技术 为了最高效地使用这些技术 知道Lisp和Lisp Stat提供
  • 智能指针之shared_ptr初始化,引用计数,常用操作和自定义删除器等等03

    一 share ptr 1 share ptr基础 1 共享所有权 不是被一个shared ptr拥有 而是被多个shared ptr之间相互协作 shared有额外开销 2 工作原理 利用引用计数的方法管理一片内存 每增加一个shared
  • C++ 一些知识点

    https www nowcoder com profile 7838045 myFollowings detail 3445247 链接 https www nowcoder com questionTerminal 087006d1e4
  • Red Hat Linux 7.5的安装及修改密码【详细】

    一 如何安装Red Hat Linux 7 5 详细 1 打开安装好的VMware 点击主页上的 创建新的虚拟机 选择 自定义 后 点击 下一步 2 选择虚拟机硬盘兼容性 我们选择Wordstation 14 x 3 选择稍后安装操作系统
  • -bash: ./mysqld: 没有那个文件或目录解决方法

    MySQL问题 bash mysqld 没有那个文件或目录 mysql安装路径 usr local mysql bin vi etc profile 添加环境变量 export PATH PATH usr local mysql bin 重
  • 营销活动:提升小程序的用户活跃度的关键

    在现今竞争激烈的商业环境中 小程序已成为企业私域营销的重要工具之一 然而 拥有一个小程序并不足以保证用户的活跃度 营销活动作为推动用户参与的有效方式 对于提升小程序的用户活跃度起着至关重要的作用 本文将深入探讨营销活动在提升小程序用户活跃度
  • Swagger的用法

    Swagger的用法 1 yml配置文件中引入依赖
  • C++ 内存管理

    C 内存管理 关于析构函数 1 when the desconstructor will be called 具体地说如果出现以下几种情况 程序就会执行析构函数 如果在一个函数中定义了一个对象 它是自动局部对象 当这个函数被调用结束时 对象
  • 静态代码块

    在Java类中 使用static关键字修饰的代码块称为静态代码块 当类被加载的时候 静态代码块就会被执行 由于类只会加载一次 所以静态代码块只会执行一次 在程序当中 使用静态代码块对类的成员变量进行初始化 package qmfx2 pub
  • FastAPI 使用 WebSocket创建实时应用程序

    超文本传输协议 或 HTTP 是当今互联网上最常用的协议之一 它允许客户端获取资源 例如 HTML 页面和图像 客户端 通常是浏览器 向服务器请求资源 图像 CSS 文件等 服务器响应请求的数据 它是一个严格的单向协议 服务器只会在客户端请