Maison  >  Article  >  développement back-end  >  Comment utiliser les notifications push dans FastAPI pour mettre à jour les données en temps réel

Comment utiliser les notifications push dans FastAPI pour mettre à jour les données en temps réel

王林
王林original
2023-07-29 18:09:141587parcourir

Comment utiliser les notifications push dans FastAPI pour mettre à jour les données en temps réel

Introduction :
Avec le développement continu d'Internet, les mises à jour des données en temps réel deviennent de plus en plus importantes. Par exemple, dans des scénarios d'application tels que le trading en temps réel, la surveillance en temps réel et les jeux en temps réel, nous devons mettre à jour les données en temps opportun pour fournir les informations les plus précises et la meilleure expérience utilisateur. FastAPI est un framework Web moderne basé sur Python qui offre un moyen simple et efficace de créer des applications Web hautes performances. Cet article explique comment utiliser FastAPI pour implémenter des notifications push afin de mettre à jour les données en temps réel.

Étape 1 : Préparation
Tout d'abord, nous devons installer FastAPI et les bibliothèques dépendantes correspondantes. Il peut être installé à l'aide de la commande suivante :

pip install fastapi
pip install uvicorn

Ensuite, nous devons créer un fichier Python et le nommer main.py. Nous y écrirons notre application FastAPI. main.py。我们将在其中编写我们的FastAPI应用程序。

步骤二:编写推送通知逻辑
我们将使用WebSocket来实现推送通知的功能。WebSocket是一种在客户端和服务器之间实现全双工通信的协议。在FastAPI中,可以使用第三方库fastapi-websocket来轻松地为我们的应用程序添加WebSocket支持。可以使用以下命令来安装该库:

pip install fastapi-websocket

main.py中,我们首先导入所需的模块:

from fastapi import FastAPI, WebSocket
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from fastapi import WebSocket, WebSocketDisconnect

from fastapi_websocket_pubsub import PubSubEndpoint
from fastapi_websocket_pubsub import PubSubWebSocketEndpoint

然后,我们创建一个FastAPI应用程序:

app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")

templates = Jinja2Templates(directory="templates")

接下来,我们需要定义WebSocket的逻辑。我们将创建一个WebSocket的子类,并在其中实现推送通知的功能:

class NotificationsWebSocket(WebSocketEndpoint):
async def on_receive(self, websocket: WebSocket, data: str):
    # 在这里实现推送通知的逻辑
    # 可以根据需要订阅特定的主题或频道

async def on_connect(self, websocket: WebSocket):
    await websocket.accept()

async def on_disconnect(self, websocket: WebSocket, close_code: int):
    await self.pubsub.unsubscribe(self.room_name, websocket)

app.add_websocket_route("/ws", NotificationsWebSocket)

on_receive方法中,我们可以根据需要订阅特定的主题或频道,并通过WebSocket将新数据发送给客户端。在FastAPI应用程序中,我们可以使用PubSubEndpoint来管理订阅和发布的逻辑。可以使用以下命令来安装fastapi_websocket_pubsub库:

pip install fastapi_websocket_pubsub

main.py中,我们导入PubSubEndpoint并创建一个实例:

from fastapi_websocket_pubsub import PubSubEndpoint

pubsub = PubSubEndpoint()

然后,我们将pubsub实例传递给WebSocket的子类,以便在其中使用推送通知的功能:

class NotificationsWebSocket(WebSocketEndpoint):
    async def on_receive(self, websocket: WebSocket, data: str):
        # 在这里实现推送通知的逻辑
        await self.pubsub.publish(self.room_name, data)

    async def on_connect(self, websocket: WebSocket):
        await self.pubsub.subscribe(self.room_name, websocket)
        await websocket.accept()

    async def on_disconnect(self, websocket: WebSocket, close_code: int):
        await self.pubsub.unsubscribe(self.room_name, websocket)

步骤三:创建前端页面
我们还需要创建一个前端页面,以便用户可以通过浏览器访问我们的应用程序。可以创建一个名为index.html的文件,并将其放在名为templates的文件夹中。在index.html中,我们可以使用WebSocket来订阅推送通知,并在接收到新数据时更新页面。以下是一个简单的示例:

<!DOCTYPE html>
<html>
<head>
    <title>Notifications</title>
</head>
<body>
    <h1>Notifications</h1>
    <ul id="messages"></ul>

    <script>
    const socket = new WebSocket("ws://localhost:8000/ws");
    
    socket.onopen = () => {
        console.log("WebSocket connection is open.");
    };
    
    socket.onmessage = (event) => {
        const message = document.createElement("li");
        message.textContent = event.data;
        document.getElementById("messages").appendChild(message);
    };
    
    socket.onclose = () => {
        console.log("WebSocket connection is closed.");
    };
    
    </script>
</body>
</html>

步骤四:启动应用程序
main.py的末尾,我们需要添加以下代码以启动FastAPI应用程序:

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

现在,我们可以使用以下命令启动我们的FastAPI应用程序:

python main.py

完成!现在,我们可以通过浏览器访问http://localhost:8000

Étape 2 : Écrire la logique de notification push

Nous utiliserons WebSocket pour implémenter la fonction de notification push. WebSocket est un protocole qui permet une communication en duplex intégral entre le client et le serveur. Dans FastAPI, nous pouvons utiliser la bibliothèque tierce fastapi-websocket pour ajouter facilement la prise en charge de WebSocket à notre application. La bibliothèque peut être installée à l'aide de la commande suivante :
rrreee

Dans main.py, nous importons d'abord les modules requis : 🎜rrreee🎜Ensuite, nous créons une application FastAPI : 🎜rrreee🎜Ensuite, nous avons besoin pour définir la logique de WebSocket. Nous allons créer une sous-classe de WebSocket et y implémenter la fonction de notification push : 🎜rrreee🎜Dans la méthode on_receive, nous pouvons nous abonner à des sujets ou à des canaux spécifiques selon les besoins et envoyer de nouvelles données via WebSocket Envoyé au client . Dans les applications FastAPI, nous pouvons utiliser PubSubEndpoint pour gérer la logique d'abonnement et de publication. La bibliothèque fastapi_websocket_pubsub peut être installée à l'aide de la commande suivante : 🎜rrreee🎜Dans main.py, on importe PubSubEndpoint et créons une instance : 🎜rrreee🎜Ensuite, on passe le pubsub exemple Donnez une sous-classe de WebSocket pour y utiliser la fonctionnalité des notifications push : 🎜rrreee🎜Troisième étape : créer une page frontale🎜 Nous devons également créer une page frontale afin que les utilisateurs puissent accéder à notre application via le navigateur. Vous pouvez créer un fichier appelé index.html et le placer dans un dossier appelé templates. Dans index.html, nous pouvons utiliser WebSocket pour nous abonner aux notifications push et mettre à jour la page lorsque de nouvelles données sont reçues. Voici un exemple simple : 🎜rrreee🎜 Étape 4 : Démarrez l'application 🎜 À la fin de main.py, nous devons ajouter le code suivant pour démarrer l'application FastAPI : 🎜rrreee🎜Maintenant, nous peut utiliser La commande suivante démarre notre application FastAPI : 🎜rrreee🎜Terminé ! Maintenant, nous pouvons visiter http://localhost:8000 via le navigateur pour afficher la fonction de notification push. Lorsque de nouvelles données sont transmises, la page sera automatiquement mise à jour pour afficher les dernières informations. 🎜🎜Conclusion : 🎜Cet article explique comment utiliser les notifications push dans FastAPI pour mettre à jour les données en temps réel. En utilisant les bibliothèques WebSocket et PubSubEndpoint, nous pouvons facilement implémenter la fonctionnalité de notification push. Cette méthode de mise à jour des données en temps réel peut être appliquée à de nombreux scénarios d'application, tels que le trading en temps réel, la surveillance en temps réel et les jeux en temps réel. J'espère que cet article pourra vous être utile et j'aimerais que vous puissiez utiliser FastAPI pour créer des applications Web plus efficaces et en temps réel. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn