Heim >Backend-Entwicklung >PHP-Tutorial >PHP Websocket-Entwicklungshandbuch zur Implementierung der Echtzeit-Flugabfragefunktion

PHP Websocket-Entwicklungshandbuch zur Implementierung der Echtzeit-Flugabfragefunktion

王林
王林Original
2023-12-02 12:16:121076Durchsuche

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

PHP Websocket-Entwicklungshandbuch: Echtzeit-Flugabfragefunktion

Einführung:
Websocket ist ein Protokoll, das eine Vollduplex-Kommunikation zwischen dem Client und dem Server implementiert und so Echtzeitnachrichten und Datenaktualisierungen ermöglicht. In diesem Artikel wird die Verwendung von PHP zum Entwickeln von Websocket vorgestellt und spezifische Codebeispiele in Kombination mit der Echtzeit-Flugabfragefunktion angegeben.

1. Verstehen Sie das Websocket-Protokoll:
Das Websocket-Protokoll ist ein Protokoll, das auf TCP basiert und die folgenden Eigenschaften aufweist:

  1. Residente Verbindung: Websocket stellt eine dauerhafte Verbindung zwischen dem Client und dem Server her, um eine Echtzeitkommunikation zu erreichen.
  2. Zwei-Wege-Kommunikation: Der Client und der Server können gleichzeitig Nachrichten senden und empfangen und so eine echte Zwei-Wege-Kommunikation erreichen.
  3. Header-Komprimierung: Websocket verwendet binäre Header zur Komprimierung, um den Overhead der Datenübertragung zu reduzieren.
  4. Heartbeat Keeping: Websocket kann Heartbeat-Informationen senden, um die Verbindung aktiv zu halten.

2. Toolauswahl für die PHP-Entwicklung von Websocket:
PHP selbst unterstützt Websocket nicht nativ, kann aber über Bibliotheken von Drittanbietern implementiert werden. In diesem Artikel entscheiden wir uns für die Verwendung der Ratchet-Bibliothek zur Implementierung von Websocket.

Ratchet ist eine PHP-Websocket-Bibliothek, die leistungsstarke Tools und Schnittstellen bereitstellt, um den Websocket-Entwicklungsprozess zu vereinfachen.

3. Projektvorbereitung:
Stellen Sie zunächst sicher, dass Composer in Ihrem Projekt installiert ist, und führen Sie dann den folgenden Befehl in der Befehlszeile aus, um die Ratchet-Bibliothek zu installieren:

composer require cboden/ratchet

Nach erfolgreicher Installation erstellen Erstellen Sie eine neue PHP-Datei (zum Beispiel: index.php) und beginnen Sie mit dem Schreiben des Codes des Websocket-Servers.

4. Servercode-Beispiel:
Das Folgende ist ein einfacher Beispielcode eines Websocket-Servers, der die Funktion der Echtzeit-Flugabfrage implementiert.

// 引入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();

Der obige Code implementiert einen einfachen Websocket-Server, der auf Port 8080 läuft, Nachrichten von Clients empfängt, Flugabfragen durchführt und dann die Abfrageergebnisse an alle Clients sendet.

5. Client-Codebeispiel:
Das Folgende ist ein Beispielcode für eine einfache HTML-Seite, die die Verbindung und das Senden und Empfangen von Nachrichten mit dem Websocket-Server implementiert.

<!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>

Der obige Code implementiert eine einfache HTML-Seite, einschließlich eines Eingabefelds und einer Schaltfläche zum Eingeben von Flugnummern und zum Senden von Abfrageanfragen. Die Abfrageergebnisse werden in Echtzeit auf der Seite angezeigt.

6. Ausführen und testen:
Speichern Sie den obigen Servercode in index.php und speichern Sie den Clientcode in einer HTML-Datei. Öffnen Sie die HTML-Datei über den Browser, um die Echtzeit-Flugabfragefunktion auszuführen und zu testen.

Zusammenfassung:
Anhand des oben genannten Websocket-Entwicklungsleitfadens und der Codebeispiele können wir die Funktion der Echtzeit-Flugabfrage realisieren. Die bidirektionale Kommunikationsfunktion von Websocket ermöglicht es dem Client und dem Server, Nachrichten in Echtzeit zu kommunizieren, wodurch unsere Anwendungen Echtzeit- und Reaktionsschneller werden. Durch die Verwendung der Ratchet-Bibliothek können wir Websocket-Anwendungen schneller entwickeln.

Natürlich kann die tatsächliche Entwicklung weitere Entwicklungen und Anpassungen basierend auf spezifischen Geschäftsanforderungen erfordern, aber der in diesem Artikel bereitgestellte Beispielcode dient als Referenz und zur grundlegenden Verwendung. Ich wünsche Ihnen viel Erfolg bei der Websocket-Entwicklung!

Das obige ist der detaillierte Inhalt vonPHP Websocket-Entwicklungshandbuch zur Implementierung der Echtzeit-Flugabfragefunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn