Maison  >  Article  >  développement back-end  >  Guide de développement PHP Websocket pour implémenter la fonction de requête de vol en temps réel

Guide de développement PHP Websocket pour implémenter la fonction de requête de vol en temps réel

王林
王林original
2023-12-02 12:16:121048parcourir

PHP Websocket开发指南,实现实时航班查询功能

Guide de développement PHP Websocket : fonction de requête de vol en temps réel

Introduction :
Websocket est un protocole qui implémente une communication en duplex intégral entre le client et le serveur, permettant la messagerie en temps réel et les mises à jour des données. Cet article présentera comment utiliser PHP pour développer Websocket et donnera des exemples de code spécifiques combinés à la fonction de requête de vol en temps réel.

1. Comprendre le protocole Websocket :
Le protocole Websocket est un protocole basé sur TCP et présente les caractéristiques suivantes :

  1. Connexion résidente : Websocket établit une connexion persistante entre le client et le serveur pour réaliser une communication en temps réel.
  2. Communication bidirectionnelle : le client et le serveur peuvent envoyer et recevoir des messages en même temps, réalisant ainsi une véritable communication bidirectionnelle.
  3. Compression d'en-tête : Websocket utilise des en-têtes binaires pour la compression afin de réduire la surcharge de transmission de données.
  4. Heartbeat Keeping : Websocket peut envoyer des informations sur les battements de cœur pour maintenir la connexion active.

2. Sélection d'outils pour le développement PHP de Websocket :
PHP lui-même ne prend pas en charge nativement Websocket, mais il peut être implémenté via des bibliothèques tierces. Dans cet article, nous choisissons d'utiliser la bibliothèque Ratchet pour implémenter Websocket.

Ratchet est une bibliothèque PHP Websocket qui fournit des outils et des interfaces puissants pour simplifier le processus de développement de Websocket.

3. Préparation du projet :
Tout d'abord, assurez-vous que Composer a été installé dans votre projet, puis exécutez la commande suivante sur la ligne de commande pour installer la bibliothèque Ratchet :

composer require cboden/ratchet

Après une installation réussie, créez un nouveau fichier PHP (par exemple : index.php), commencez à écrire le code du serveur Websocket.

4. Exemple de code de serveur :
Ce qui suit est un exemple simple de code d'un serveur Websocket, qui implémente la fonction de requête de vol en temps réel.

// 引入Ratchet库
require 'vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use GuzzleHttpClient;

class FlightQuery implements MessageComponentInterface
{
    protected $clients;

    public function __construct()
    {
        $this->clients = new SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn)
    {
        // 存储所有的客户端连接
        $this->clients->attach($conn);
        echo "有新的连接:(#{$conn->resourceId})
";
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 接收到消息时的处理
        // 在这里进行航班查询的逻辑
        $result = $this->queryFlight($msg);

        // 向所有的客户端发送查询结果
        foreach ($this->clients as $client) {
            $client->send($result);
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        // 连接关闭时的处理
        $this->clients->detach($conn);

        echo "连接关闭:(#{$conn->resourceId})
";
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        // 错误处理
        echo "发生错误:(#{$conn->resourceId}): {$e->getMessage()}
";

        $conn->close();
    }

    private function queryFlight($flightNumber)
    {
        // 使用外部的航班查询API
        $httpClient = new Client();
        $response = $httpClient->get("https://api.flightquery.com/flight/{$flightNumber}");

        return $response->getBody();
    }
}

// 启动Websocket服务器
$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new FlightQuery()
        )
    ),
    8080
);

echo "Websocket服务器启动成功
";

$server->run();

Le code ci-dessus implémente un simple serveur Websocket, fonctionnant sur le port 8080, recevant les messages des clients et effectuant des requêtes de vol, puis envoyant les résultats de la requête à tous les clients.

5. Exemple de code client :
Ce qui suit est un exemple de code pour une page HTML simple, qui implémente la connexion et l'envoi et la réception de messages avec le serveur Websocket.

<!DOCTYPE html>
<html>
<head>
    <title>实时航班查询</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        $(function () {
            // 连接Websocket服务器
            var websocket = new WebSocket('ws://localhost:8080');

            // 接收Websocket消息的处理
            websocket.onmessage = function (event) {
                var result = event.data;
                // 处理航班查询结果
                $("#result").text(result);
            };

            // 发送航班查询请求
            $("#query-button").click(function () {
                var flightNumber = $("#flight-number").val();
                websocket.send(flightNumber);
            });
        });
    </script>
</head>
<body>
    <h1>实时航班查询</h1>
    <input type="text" id="flight-number" placeholder="请输入航班号">
    <button id="query-button">查询</button>
    <div id="result"></div>
</body>
</html>

Le code ci-dessus implémente une page HTML simple, comprenant une zone de saisie et un bouton pour saisir les numéros de vol et envoyer des demandes de requête. Les résultats de la requête seront affichés sur la page en temps réel.

6. Exécutez et testez :
Enregistrez le code du serveur ci-dessus dans index.php et enregistrez le code client dans un fichier HTML. Ouvrez le fichier HTML via le navigateur pour exécuter et tester la fonction de requête de vol en temps réel.

Résumé :
Grâce au guide de développement Websocket et aux exemples de code mentionnés ci-dessus, nous pouvons réaliser la fonction de requête de vol en temps réel. La fonctionnalité de communication bidirectionnelle de Websocket permet au client et au serveur de communiquer des messages en temps réel, rendant nos applications plus réactives et en temps réel. En utilisant la bibliothèque Ratchet, nous pouvons développer des applications Websocket plus rapidement.

Bien sûr, le développement réel peut nécessiter des développements et des ajustements supplémentaires en fonction des besoins spécifiques de l'entreprise, mais l'exemple de code fourni dans cet article est destiné à référence et à une utilisation de base. Je vous souhaite du succès dans le développement de Websocket !

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