Maison  >  Article  >  développement back-end  >  Utilisez php pour développer Websocket afin de créer une fonction de prévisions météorologiques en temps réel

Utilisez php pour développer Websocket afin de créer une fonction de prévisions météorologiques en temps réel

王林
王林original
2023-12-18 10:10:151257parcourir

Utilisez php pour développer Websocket afin de créer une fonction de prévisions météorologiques en temps réel

Utilisez PHP pour développer WebSocket afin de créer une fonction de prévisions météorologiques en temps réel

Avant-propos
WebSocket est un protocole de communication réseau qui peut établir une connexion persistante entre le client et le serveur pour obtenir une communication bidirectionnelle en temps réel. Dans le développement Web, WebSocket est largement utilisé dans des scénarios tels que le chat instantané, le push en temps réel et les mises à jour de données en temps réel. Cet article explique comment utiliser PHP pour développer WebSocket afin d'implémenter la fonction de prévisions météorologiques en temps réel.

Étape 1 : Créer un serveur WebSocket
Tout d'abord, nous devons créer un serveur WebSocket pour gérer les connexions clients et l'envoi de messages. En PHP, vous pouvez utiliser la bibliothèque Ratchet pour implémenter les fonctionnalités d'un serveur WebSocket.

  1. Tout d'abord, assurez-vous que Composer est installé. Composer est un outil de gestion des dépendances pour PHP.
  2. Créez un nouveau projet PHP, et dans le répertoire du projet, créez un nouveau fichier composer.json et ajoutez le contenu suivant :
{
    "require": {
        "cboden/ratchet": "^0.4"
    }
}
  1. Dans le répertoire du projet, exécutez la commande composer install pour installer la bibliothèque Ratchet.
  2. Créez un nouveau fichier PHP nommé server.php pour implémenter la logique principale du serveur WebSocket. L'exemple de code est le suivant :
<?php
require __DIR__ . '/vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

class WeatherForecast implements MessageComponentInterface
{
    public function onOpen(ConnectionInterface $conn)
    {
        // 当有新的客户端连接时,触发该方法
    }

    public function onClose(ConnectionInterface $conn)
    {
        // 当有客户端断开连接时,触发该方法
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 当收到客户端发送的消息时,触发该方法
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        // 当发生错误时,触发该方法
    }

    public function broadcastMessage($msg)
    {
        // 向所有连接的客户端广播消息
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new WeatherForecast()
        )
    ),
    8080
);

$server->run();

Dans le code ci-dessus, nous avons créé une classe nommée WeatherForecast, qui implémente l'interface MessageComponentInterface de Ratchet, qui contient diverses méthodes de traitement d'événements du serveur WebSocket, telles que onOpen, onClose, onMessage wait. Nous pouvons écrire une logique spécifique dans ces méthodes pour gérer la connexion, la déconnexion et l'envoi de messages client.

Dans la classe WeatherForecast, nous définissons également une méthode BroadcastMessage pour diffuser des messages à tous les clients connectés.

Enfin, connectez les trois objets HttpServer, WsServer et WeatherForecast ensemble via la méthode d'usine d'IoServer et spécifiez le numéro de port du serveur comme 8080.

Étape 2 : Accédez à l'API des prévisions météorologiques
Ensuite, nous devons obtenir des données de prévisions météorologiques en temps réel et les envoyer au client connecté. Dans cet article, nous utilisons une API de prévisions météo publique, mais vous pouvez également choisir d'autres API en fonction des besoins réels.

Dans la méthode onOpen de la classe WeatherForecast, nous pouvons lancer une requête HTTP pour obtenir des données de prévisions météorologiques. L'exemple de code est le suivant :

public function onOpen(ConnectionInterface $conn)
{
    $url = 'https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=Beijing';
    $response = file_get_contents($url);
    $data = json_decode($response, true);

    // 处理天气预报数据,比如将数据发送给客户端
}

Parmi eux, YOUR_API_KEY doit être remplacé par votre clé API, et la ville interrogée doit être modifiée en fonction des besoins réels.

Étape 3 : Envoyer les données de prévisions météorologiques en temps réel
Après avoir obtenu les données de prévisions météorologiques, nous pouvons envoyer les données au client connecté via le serveur WebSocket.

Dans la méthode onOpen de la classe WeatherForecast, on peut appeler la méthode BroadcastMessage pour diffuser le message à tous les clients connectés. L'exemple de code est le suivant :

public function onOpen(ConnectionInterface $conn)
{
    $url = 'https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=Beijing';
    $response = file_get_contents($url);
    $data = json_decode($response, true);

    $this->broadcastMessage($data['current']);
}

Dans le code ci-dessus, nous utilisons le champ actuel des données de prévisions météorologiques comme contenu du message et le diffusons à tous les clients connectés via la méthode BroadcastMessage.

Dans la méthode onMessage de la classe WeatherForecast, nous pouvons traiter les messages envoyés par le client et envoyer les données correspondantes en fonction des besoins réels. L'exemple de code est le suivant :

public function onMessage(ConnectionInterface $from, $msg)
{
    if ($msg === 'getWeather') {
        $url = 'https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=Beijing';
        $response = file_get_contents($url);
        $data = json_decode($response, true);

        $from->send($data['current']);
    }
}

Dans le code ci-dessus, lorsque le client envoie le message getWeather, nous lancerons à nouveau une requête HTTP pour obtenir les dernières données de prévisions météorologiques et l'enverrons au client.

Étape 4 : Accès client et affichage
Enfin, nous devons écrire le code client pour accéder et afficher les données de prévisions météorologiques en temps réel. Dans cet article, nous utilisons JavaScript pour implémenter des fonctionnalités côté client.

<script>
    const socket = new WebSocket('ws://localhost:8080');

    socket.onopen = function(event) {
        socket.send('getWeather');
    }

    socket.onmessage = function(event) {
        const weatherData = JSON.parse(event.data);

        // 处理天气预报数据,比如展示在网页上
    }
</script>

Dans le code ci-dessus, nous avons créé un objet WebSocket et spécifié l'adresse du serveur comme ws://localhost:8080. Dans l'événement onopen, nous avons envoyé le message getWeather au serveur pour déclencher l'envoi par le serveur de données de prévisions météorologiques en temps réel. Dans l'événement onmessage, nous traitons le message envoyé par le serveur et l'affichons sur la page Web.

Résumé
En développant WebSocket en PHP, nous pouvons implémenter une fonction de prévisions météo en temps réel. Grâce au serveur WebSocket, une communication bidirectionnelle en temps réel entre le client et le serveur peut être réalisée. En accédant à l'API de prévisions météorologiques et en envoyant des données de prévisions météorologiques en temps réel, nous pouvons envoyer les dernières données de prévisions météorologiques au client connecté en temps opportun et les afficher sur le client. Cette méthode peut non seulement répondre aux besoins de prévisions météorologiques en temps réel, mais peut également être appliquée à d'autres scénarios de transmission de données 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