首页 后端开发 Python教程 使用 Python 了解 WebSocket

使用 Python 了解 WebSocket

Sep 10, 2024 am 06:01 AM

Understanding WebSockets using Python

简介

在当今的数字环境中,实时通信非常重要。传统的 HTTP 由于其请求-响应模型和固有的延迟而存在不足。随着业务和应用程序越来越需要即时数据传输(无论是实时股票更新、多人游戏还是协作工具),WebSocket 已成为一项改变游戏规则的技术。与 HTTP 不同,WebSocket 支持全双工、双向通信,允许服务器和客户端通过单个持久连接实时发送和接收消息。这不仅减少了开销,还显着提高了 Web 应用程序的性能和响应能力。

什么是 WebSocket

WebSocket 是一种通信协议,可通过单个长期 TCP 连接提供全双工通信通道。这意味着一旦客户端和服务器之间建立了 WebSocket 连接,双方就可以同时连续地发送和接收数据,而无需重新打开连接。 WebSocket 被设计为高效且低延迟,使其成为实时应用程序的理想选择。

为什么使用 WebSocket ?

WebSockets 用于客户端和服务器之间需要实时通信的场景。与遵循请求-响应模型(客户端必须发起每个请求)的传统 HTTP 不同,WebSocket 允许双向通信。这使得 WebSocket 在需要将数据从服务器实时推送到客户端而无需客户端请求的应用程序中特别有用。

现实世界用例

  • 聊天应用程序:WebSockets 常用于需要实时无延迟发送和接收消息的聊天应用程序。
  • 实时流媒体:WebSocket 可用于流式传输实时视频或音频,允许服务器在新内容可用时将其推送到客户端。
  • 协作平台:在 Google Docs 等协作工具中,WebSocket 允许多个用户查看其他人所做的实时更改,而无需刷新页面。

WebSocket 与 HTTP

沟通模型

  • HTTP:遵循请求-响应模型,客户端发起请求,服务器响应。响应后,连接关闭。
  • WebSockets:WebSockets 提供全双工、长期存在的连接,客户端和服务器都可以连续发送和接收数据,而无需每次重新打开连接。

连接处理

  • HTTP:每个请求都会打开一个新连接,响应完成后关闭连接。
  • WebSockets:初次握手(使用 HTTP)后,连接保持打开状态,允许实时通信,无需重新建立连接。

效率

  • HTTP:适合一次性通信或请求不频繁的事务。它是无状态的,因此为了持续通信,需要使用长轮询等技术,这可能会占用大量资源。
  • WebSockets:WebSockets 对于实时和双向通信非常有效,因为连接保持打开状态。与长轮询等技术相比,它们使用的资源更少。

延迟

  • HTTP:总是存在延迟(延迟),因为客户端必须请求,服务器必须响应。这对于实时用例来说效率很低。
  • WebSockets:建立连接后,数据几乎可以立即在客户端和服务器之间流动,减少延迟,使其成为实时应用程序的理想选择。

用例

  • HTTP:最适合由客户端发起请求的传统 Web 应用程序(例如 REST API)。
  • WebSockets:非常适合实时应用程序,如聊天应用程序、股票交易平台、实时仪表板和在线游戏。

WebSocket 的优点

  1. 实时通信:WebSocket 允许实时、低延迟通信,使其成为需要即时更新的应用程序的理想选择。
  2. 双向数据流:客户端和服务器都可以随时发送和接收数据,不像HTTP,服务器只能响应客户端发起的请求。
  3. 减少开销:通过保持连接打开,WebSocket 减少了重复建立新 HTTP 连接的需要,从而节省了带宽并减少了延迟。
  4. 效率:与长轮询或连续数据传输的 HTTP 请求相比,WebSocket 使用更少的资源。
  5. 可扩展性:WebSockets 可以有效地处理许多并发连接,使其适合可扩展的实时应用程序。

WebSocket 的工作原理

  1. 握手:WebSocket 连接以 HTTP 握手开始。客户端向服务器发送带有 Upgrade 标头的请求,将连接协议从 HTTP 切换为 WebSocket。
  2. 连接建立:握手后,连接建立。服务器和客户端保持持久的、开放的 TCP 连接。
  3. 全双工通信:一旦 WebSocket 连接打开,数据就可以同时来回发送。服务器和客户端都可以随时发起通信。
  4. 关闭连接:当不再需要连接时,服务器或客户端都可以关闭连接。这将终止会话并释放资源。

WebSocket 用例

  1. 聊天应用程序:WhatsApp 和 Slack 等即时消息服务使用 WebSockets 在用户之间进行实时消息传递。
  2. 实时更新:WebSockets 为金融交易平台(股票价格)、体育比分或实时新闻提要等应用程序提供实时数据更新。
  3. 协作工具:WebSocket 可以在 Google Docs 或 Figma 等协作工具中实现实时更新,多个用户可以同时编辑文档。
  4. 在线游戏:多人游戏依靠 WebSocket 进行实时玩家操作和交互。
  5. 物联网和传感器数据:具有实时数据流的设备(例如物联网设备、天气传感器)使用 WebSocket 发送连续更新。

使用 Python 和 WebSocket 构建实时应用程序

让我们使用 WebSockets 与 Python(使用 FastAPI)和 Streamlit 构建一个实时应用程序。

1。设置 FastAPI WebSocket 服务器

此代码使用 FastAPI 设置 WebSocket 服务器。

from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from typing import List

app = FastAPI()

class ConnectionManager:
    def __init__(self):
        self.active_connections: List[WebSocket] = []

    async def connect(self, websocket: WebSocket):
        await websocket.accept()
        self.active_connections.append(websocket)

    def disconnect(self, websocket: WebSocket):
        self.active_connections.remove(websocket)

    async def broadcast(self, message: str):
        for connection in self.active_connections:
            await connection.send_text(message)

manager = ConnectionManager()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await manager.connect(websocket)
    try:
        while True:
            data = await websocket.receive_text()
            await manager.broadcast(f"Message: {data}")
    except WebSocketDisconnect:
        manager.disconnect(websocket)
登录后复制

此 WebSocket 服务器可以处理多个连接并向所有连接的客户端广播消息。

2。 Streamlit 前端

现在,让我们使用 Streamlit 构建一个实时应用程序,连接到 WebSocket 服务器并接收实时更新。

import streamlit as st
import asyncio
import websockets

async def websocket_receive():
    uri = "ws://localhost:8000/ws"
    async with websockets.connect(uri) as websocket:
        while True:
            message = await websocket.recv()
            st.write(f"Received: {message}")

st.title("Real-Time WebSocket Client")

if st.button("Connect to WebSocket"):
    st.write("Connected!")
    asyncio.run(websocket_receive())
登录后复制

说明:当用户单击“连接到 WebSocket”按钮时,Streamlit 前端会与 WebSocket 服务器建立连接并侦听消息。

3。运行应用程序

运行 FastAPI 服务器:

uvicorn server:app --reload
登录后复制

运行 Streamlit 应用程序:

streamlit run your_script.py
登录后复制

实时沟通的关键步骤:

  • WebSocket 设置:WebSocket 服务器运行并接受连接。
  • Streamlit 连接:Streamlit 前端发起与 WebSocket 服务器的连接。
  • 全双工通信:客户端(Streamlit)和服务器(FastAPI)都可以实时发送/接收消息。

以上是使用 Python 了解 WebSocket的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1276
29
C# 教程
1256
24
Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python和时间:充分利用您的学习时间 Python和时间:充分利用您的学习时间 Apr 14, 2025 am 12:02 AM

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

学习Python:2小时的每日学习是否足够? 学习Python:2小时的每日学习是否足够? Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python vs. C:了解关键差异 Python vs. C:了解关键差异 Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python标准库的哪一部分是:列表或数组? Python标准库的哪一部分是:列表或数组? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

科学计算的Python:详细的外观 科学计算的Python:详细的外观 Apr 19, 2025 am 12:15 AM

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

See all articles