简介
在当今的数字环境中,实时通信非常重要。传统的 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 的优点
- 实时通信:WebSocket 允许实时、低延迟通信,使其成为需要即时更新的应用程序的理想选择。
- 双向数据流:客户端和服务器都可以随时发送和接收数据,不像HTTP,服务器只能响应客户端发起的请求。
- 减少开销:通过保持连接打开,WebSocket 减少了重复建立新 HTTP 连接的需要,从而节省了带宽并减少了延迟。
- 效率:与长轮询或连续数据传输的 HTTP 请求相比,WebSocket 使用更少的资源。
- 可扩展性:WebSockets 可以有效地处理许多并发连接,使其适合可扩展的实时应用程序。
WebSocket 的工作原理
- 握手:WebSocket 连接以 HTTP 握手开始。客户端向服务器发送带有 Upgrade 标头的请求,将连接协议从 HTTP 切换为 WebSocket。
- 连接建立:握手后,连接建立。服务器和客户端保持持久的、开放的 TCP 连接。
- 全双工通信:一旦 WebSocket 连接打开,数据就可以同时来回发送。服务器和客户端都可以随时发起通信。
- 关闭连接:当不再需要连接时,服务器或客户端都可以关闭连接。这将终止会话并释放资源。
WebSocket 用例
- 聊天应用程序:WhatsApp 和 Slack 等即时消息服务使用 WebSockets 在用户之间进行实时消息传递。
- 实时更新:WebSockets 为金融交易平台(股票价格)、体育比分或实时新闻提要等应用程序提供实时数据更新。
- 协作工具:WebSocket 可以在 Google Docs 或 Figma 等协作工具中实现实时更新,多个用户可以同时编辑文档。
- 在线游戏:多人游戏依靠 WebSocket 进行实时玩家操作和交互。
- 物联网和传感器数据:具有实时数据流的设备(例如物联网设备、天气传感器)使用 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中文网其他相关文章!

Tomergelistsinpython,YouCanusethe操作员,estextMethod,ListComprehension,Oritertools

在Python3中,可以通过多种方法连接两个列表:1)使用 运算符,适用于小列表,但对大列表效率低;2)使用extend方法,适用于大列表,内存效率高,但会修改原列表;3)使用*运算符,适用于合并多个列表,不修改原列表;4)使用itertools.chain,适用于大数据集,内存效率高。

使用join()方法是Python中从列表连接字符串最有效的方法。1)使用join()方法高效且易读。2)循环使用 运算符对大列表效率低。3)列表推导式与join()结合适用于需要转换的场景。4)reduce()方法适用于其他类型归约,但对字符串连接效率低。完整句子结束。

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python的关键特性包括:1.语法简洁易懂,适合初学者;2.动态类型系统,提高开发速度;3.丰富的标准库,支持多种任务;4.强大的社区和生态系统,提供广泛支持;5.解释性,适合脚本和快速原型开发;6.多范式支持,适用于各种编程风格。

Python是解释型语言,但也包含编译过程。1)Python代码先编译成字节码。2)字节码由Python虚拟机解释执行。3)这种混合机制使Python既灵活又高效,但执行速度不如完全编译型语言。

useeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.ForloopSareIdeAlforkNownsences,而WhileLeleLeleLeleLoopSituationSituationSituationsItuationSuationSituationswithUndEtermentersitations。

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐个偏置,零indexingissues,andnestedloopineflinefficiencies


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

Dreamweaver CS6
视觉化网页开发工具

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

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

WebStorm Mac版
好用的JavaScript开发工具