首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Python FastAPI中使用websockets并行发送/接收

在Python的FastAPI框架中,你可以使用websockets来建立双向通信

首先,确保你已经安装了FastAPI和Uvicorn,以及websockets库。如果没有安装,可以使用以下命令进行安装:

代码语言:javascript
复制
pip install fastapi uvicorn websockets

然后,你可以创建一个FastAPI应用,并使用websockets来并行发送/接收消息。以下是一个简单的示例:

代码语言:javascript
复制
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import asyncio
import websockets

app = FastAPI()

html = """
<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
    </head>
    <body>
        <h1>WebSocket Chat</h1>
        <div id="messages"></div>
        <input id="message-input" type="text" placeholder="Type a message...">
        <button id="send-message">Send</button>
        <script>
            var ws = new WebSocket("ws://localhost/ws");
            ws.onmessage = function(event) {
                var messages = document.getElementById("messages");
                var message = document.createElement("div");
                message.textContent = event.data;
                messages.appendChild(message);
            };
            document.getElementById("send-message").onclick = function() {
                var input = document.getElementById("message-input");
                ws.send(input.value);
                input.value = "";
            };
        </script>
    </div>
</body>
</html>
"""

@app.get("/")
async def get():
    return HTMLResponse(html)

connected_clients = set()

async def websocket_handler(websocket: websockets.WebSocketServerProtocol, _: str):
    await websocket.accept()
    connected_clients.add(websocket)
    try:
        while True:
            message = await websocket.recv()
            for client in connected_clients:
                if client != websocket:
                    await client.send(message)
    except websockets.exceptions.ConnectionClosed:
        connected_clients.remove(websocket)

@app.websocket("/ws")
async def websocket_endpoint(websocket: websockets.WebSocketServerProtocol):
    await websocket_handler(websocket, "")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

在这个示例中,我们创建了一个简单的聊天应用。当用户访问根URL时,会返回一个包含HTML页面的响应,该页面包含用于发送和接收消息的JavaScript代码。

websocket_handler函数处理与客户端的连接、接收消息以及将消息广播给其他已连接的客户端。我们使用connected_clients集合来跟踪所有已连接的客户端。

最后,我们定义了一个WebSocket端点/ws,它将处理传入的WebSocket连接并调用websocket_handler函数。

要运行此示例,请保存代码到一个Python文件(例如main.py),然后在终端中运行以下命令:

代码语言:javascript
复制
uvicorn main:app --reload
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

FastAPI(60)- 针对 WebSocket 进行单元测试

usr/bin/env python # -*- coding:utf-8 _*- """ # author: 小菠萝测试笔记 # blog: https://www.cnblogs.com/poloyy...import TestClient from fastapi.websockets import WebSocket app = FastAPI() testClient = TestClient(...text"):将给定的数据发送到应用程序,使用 mode="binary" 通过二进制数据帧发送 JSON 接收数据的三种方法 .receive_text():等待应用程序发送的传入文本并返回它 .receive_bytes...():等待应用程序发送的传入字节串并返回它 .receive_json(mode="text"):等待应用程序发送的传入 json 数据并返回它,使用 mode="binary" 通过二进制数据帧发送...JSON 可能会引发 starlette.websockets.WebSocketDisconnect 关闭连接 .close(code=1000):客户端关闭 websocket 连接

1K30
  • Java使用HttpUtils实现发送HTTP请求

    微信公众号:冯文议(ID:fwy-world) HTTP请求,日常开发,还是比较常见的,今天给大家分享HttpUtils如何使用。...阅读本文,你将收获: 简单总结HTTP请求常用配置; JavaLibHttpUtils如何使用; 如何封装HTTP请求工具类。...第一部分:简单总结HTTP请求常用配置 大家好, Java 开发,经常遇到需要调用第三方提供的接口服务,常见的形式是 HTTP + JSON,下面,就对 http 请求常见的设置,做一个说明 http...提供多种请求方式,以满足我们日常需要,先按请求方式来做说明: GET POST PUT PATCH DELETE RESTful API 开发,我们可以根据这些请求方式设计我们的API接口。...; 二是,原来使用如此简单。

    3.8K00

    Python使用pycudaGPU上并行处理批量判断素数

    借助于扩展库pycuda,可以Python访问NVIDIA显卡提供的CUDA并行计算API,使用非常方便。...安装pycuda时要求已正确安装合适版本的CUDA和Visual Studio(注意,并不是版本越新越合适,目前2015暂时还不行,最好使用VS2013),然后再使用pip安装pycuda。...import pycuda.driver as drv import numpy as np from pycuda.compiler import SourceModule #编译C代码进入显卡,并行判断素数...block=(size,1,1), grid=(2,1)) result += len(set(filter(None, dest))) print(time.time()-start) #上面的代码把...1也算上了,这里减去 print(result-1) 测试结果:4核CPU、640核GPU的笔记本上运行,本文代码为CPU上运行的类似代码运行速度的8倍左右。

    2K30

    msmq3.0使用http协议发送消息

    1.先声明: msmq3.0仅在winxp和win2003以上系统支持,如果windows vista系统,据说已经开始支持msmq4.0了 2.为什么要使用http协议发送消息 访问internet...远程发送消息时,msmq2.0以上就已经开始支持tcp方式了,但是如果外网的服务器与发送端之间有防火墙或其它网络设备隔离,或者服务器上的tcp所需要的端口未开放,tcp方式将无法发送,而http协议使用的是默认的...安装过程,需要在iis的默认站点(即标识为W3WVC1,msmq安装定死了这一标识)创建msmq的虚拟目录,如果你不幸把iis的默认站点删除了,就无法正确安装msmq3.0的http支持(既使你再新建一个默认站点也没用...管理,右击默认站点-->属性-->网站-->属性-->弹出对话框最下面的日志文件名W3SVC1529656452\exyymmdd.log,这里的1529656452就是内部标识) 修改以下几个地方...http://www.microsoft.com/china/windowsserver2003/techinfo/overview/msmqb2b.mspx 最后特别感谢我的网友yongfeng,调试过程是他给我很多帮助

    1.7K80

    FastAPI框架诞生的缘由(下)

    它被设计为具有接收两个参数的函数,一个“请求”和一个“响应”。然后,您从请求“读取”部分,并将“部分”“写入”响应。由于这种设计,不可能用标准Python类型提示将请求参数和主体声明为函数参数。...像 Hug(基于Falcon ) 一样,FastAPI 函数声明一个 response 参数。 FastAPI 这个是可选的,并且主要用于设置 Header,cookie 和备用状态代码。...Hug 启发了 FastAPI 函数声明一个 response 参数在用于设置标头和 cookie。...尽管基准测试它比Marshmallow 更快。并且由于它基于相同的Python类型提示,因此对编辑器的支持非常棒。...您可以将其与 Gunicorn 结合使用,以拥有异步多进程服务器。“ 部署” 部分查看更多详细信息。 (完)

    2.4K20

    Python 异步 ASGI 服务器及框架

    ASGI Python3.5 之后增加 async/await 特性之后,异步编程变得异常火爆,越来越多开发者投入异步的怀抱。...而 ASGI 协议规范的出现填补了这一空白,这意味着我们现在能够开始构建可在所有异步框架中使用的通用工具集 ASGI(异步服务器网关接口)是WSGI的精神继承者,旨在在具有异步功能的Python Web...构建的,是 Python 异步生态重要的一员。...FastAPI 是一个基于 Starlette 和 Pydantic 的 API 框架,其灵感来自以前的 APISta 服务器版本 您可以使用 Python 3.6+ 类型声明编写 API 函数参数,并获得自动数据转换...FastApi 最主要的特点是快,非常高的性能,向 NodeJS 和 Go 看齐,现有最快的Python框架之一 同时它可以自动生成交互式 API 文档 UI,编写 API 接口后,你就可以使用符合标准的

    3.2K10

    Python如何使用Elasticsearch?

    但是,由于眼见为实,可以浏览器访问URLhttp://localhost:9200或者通过cURL 查看类似于这样的欢迎界面以便你知道确实成功安装了: 我开始访问Python的Elastic...ES可以做很多事情,但是希望你自己通过阅读文档来进一步探索它,而我将继续介绍Python使用ES。...Python使用ElasticSearch 说实话,ES的REST API已经足够好了,可以让你使用requests库执行所有任务。...不过,你可以使用ElasticSearch的Python库专注于主要任务,而不必担心如何创建请求。 通过pip安装它,然后你可以在你的Python程序访问它。...我使用Chrome,借助名为ElasticSearch Toolbox的工具使用ES数据查看器来查看数据。 我们继续之前,让我们calories字段中发送一个字符串,看看它是如何发生的。

    8K30

    Github 火热的 FastAPI 库,站在了这些知名库的肩膀上

    实际上,FastAPI 应用程序内部使用 Requests 是很常见的。 但是,FastAPI 从 Requests 获得了很多启发。...启发 FastAPI 地方: 使用代码来定义提供的数据类型和验证的 schema,验证都是自动化的。 Webargs API 框架需要的另一大功能点是解析从前端发送的请求数据。...它被设计为具有接收两个参数的函数,一个“请求”和一个“响应”。然后,您从请求“读取”部分,并将“部分”“写入”响应。由于这种设计,不可能用标准Python类型提示将请求参数和主体声明为函数参数。...由于它基于先前的 Python 同步 Web 框架(WSGI)标准,尽管它仍然具有高性能,但它不能处理 Websockets 和其他事物。...尽管基准测试它比Marshmallow 更快。并且由于它基于相同的Python类型提示,因此对编辑器的支持非常棒。

    5.2K30

    关于FastAPI异步并发的技术背景和细节

    FastAPI的路径操作函数,可以使用async def定义: from typing import Union from fastapi import FastAPI app = FastAPI...技术背景 Python语法里面,如果你想异步请求三方库,需要使用await: results = await some_library() 使用了await就必须在def前面加上async: @app.get...技术细节 Python新版本已经原生支持异步代码了。所谓异步代码,指的是编程语言,会告诉计算机程序,某个时刻停下来,等待其他任务完成后,再继续运行。...这些“其他任务”,通常指的是耗时较长的IO操作,比如: 客户端通过网络发送数据; 服务端通过网络发送数据; 程序从磁盘读取文件内容; 程序将文件内容写入磁盘; 远程API操作;...乱用async,async里面有同步调用,则会变成串行,Fast秒变Slow。 而对于其他函数,FastAPI则不会管,def就是同步调用,立马返回结果。

    1.4K10

    使用 Pandas Python 绘制数据

    在有关基于 Python 的绘图库的系列文章,我们将对使用 Pandas 这个非常流行的 Python 数据操作库进行绘图进行概念性的研究。...Pandas 是 Python 的标准工具,用于对进行数据可扩展的转换,它也已成为从 CSV 和 Excel 格式导入和导出数据的流行方法。 除此之外,它还包含一个非常好的绘图 API。...这非常方便,你已将数据存储 Pandas DataFrame ,那么为什么不使用相同的库进行绘制呢? 本系列,我们将在每个库制作相同的多条形柱状图,以便我们可以比较它们的工作方式。...我们使用的数据是 1966 年至 2020 年的英国大选结果: image.png 自行绘制的数据 继续之前,请注意你可能需要调整 Python 环境来运行此代码,包括: 运行最新版本的 Python...本系列文章,我们已经看到了一些令人印象深刻的简单 API,但是 Pandas 一定能夺冠。

    6.9K20

    RabbitMQPython使用详解

    https://blog.csdn.net/Coxhuang/article/details/89765797 Python队列Queue使用 ???...#1 环境 Python3.7.3 pika==1.0.1 # pika的版本不同,提供方法的参数名有变化 #2 开始 #2.1 轮询模式 此模式下,发送队列的一方把消息存入mq的指定队列后,若有消费者端联入相应队列...queue_name_test 队列 body="Hello RabbitMQ, I'm first task ", # 发送消息的内容 properties=pika.BasicProperties...image.png ---- image.png ---- image.png ---- image.png ---- 轮询模式:公平分配任务给消费者,不考虑消费者的消费能力 #2.2 广播模式 多...consumer的情况下,默认rabbitmq是轮询发送消息的,但有的consumer消费速度快,有的消费速度慢,为了资源使用更平衡,引入ack确认机制。

    4.3K20

    FastAPI 学习之路(五十一)WebSockets(八)接受发送json格式消息

    前言 上一篇我们分享了FastAPI 学习之路(五十)WebSockets(七)实现一对一聊天,那么我们今天来实现呢,websockets接受和发送json格式消息。...正文 相对于之前的text的消息来说,我们之前发送的消息都是text的居多,那么对于text格式的消息来说,我们处理起来,尤其是后端要麻烦的多,那么我们可不可以传递json格式的,对于前后端来说都好处理的一种格式的消息...我们之前的websockets管理的的消息的处理全部改造成json格式的。...user, "ws": ws}) async def send_other_message_json(self, message: dict, user: str): # 发送个人消息...所有的都接受到了,当我只对一个人说是,只有这个人接收到了这条消息。 后记 发现问题,解决问题。遇到问题,慢慢解决问题即可。

    2.6K10

    Python 如何使用 format 函数?

    前言 Python,format()函数是一种强大且灵活的字符串格式化工具。它可以让我们根据需要动态地生成字符串,插入变量值和其他元素。...本文将介绍format()函数的基本用法,并提供一些示例代码帮助你更好地理解和使用这个函数。 format() 函数的基本用法 format()函数是通过字符串插入占位符来实现字符串格式化的。...占位符使用一对花括号{}表示,可以{}中指定要插入的内容。...下面是一个使用关键字参数的示例: formatted_string = "Name: {name}, Age: {age}".format(name="Alice", age=25) 在上面的示例,name...formatted_string) 运行上述代码,输出结果如下: Formatted value with comma separator: 12,345.6789 Percentage: 75.00% 总结 通过本文,我们了解了Python

    80650

    Python】JupyterPyCharm使用

    由于官方给的例程是用的IPython,后缀名为ipynb,和之前接触的Python写法不一样,来记录一下自己今天踩到的一个坑。...步骤 0 安装Jupyter pip install jupyter 1 新建一个IPython文件 这里我文件夹上直接右键->New->Jupyter Notebook,和File一样。...其实应该先在Terminal里运行Jupyter Notebook,就会出现如下结果: 把这个复制到刚才那个对话框里,就能愉快地使用Jupyter了。...另,cmd里输入jupyter notebook list可以查询当前的列表。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    4.5K20

    FastAPI后台开发基础(8):Cookie的使用

    FastAPI使用Cookie 示例代码 服务器向客户端写入Cookie数据 @app.get("/async_set_cookie") async def set_cookie_to_client...使用 curl 命令作为客户端,向服务器发送请求并接收服务端设置的 cookie 数据: curl -c test_cookies -X 'GET' \ 'http://127.0.0.1:18081...curl 客户端从本地缓存文件读取 cookie,并发送给服务器: curl -b test_cookies -X 'GET' \ 'http://127.0.0.1:18081/async_with_cookie...Curl 正确执行: Request 参数与显式的 Path、Query、Body、Cookie、Header 参数的使用场景划分 FastAPI's Path, Query, Body, Cookie...推荐使用显式的 Path、Query、Body、Cookie、Header 参数的原因 Type safety: FastAPI performs type checking and conversion

    15832
    领券