ホームページ >バックエンド開発 >PHPチュートリアル >リアルタイム フライト クエリ機能を実装するための PHP Websocket 開発ガイド

リアルタイム フライト クエリ機能を実装するための PHP Websocket 開発ガイド

王林
王林オリジナル
2023-12-02 12:16:121092ブラウズ

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

PHP Websocket 開発ガイド: リアルタイム フライト クエリ関数

はじめに:
Websocket は、クライアントとサーバー間の全二重通信を実装するプロトコルです。 、リアルタイムのメッセージングとデータ更新を実現できます。この記事では、PHP を使用して Websocket を開発する方法を紹介し、リアルタイム フライト クエリ機能と組み合わせた具体的なコード例を示します。

1. Websocket プロトコルを理解する:
Websocket プロトコルは TCP に基づくプロトコルであり、次の特徴があります:

  1. 常駐接続: Websocket はクライアントとサーバーの間にあります。サーバー リアルタイム通信のための永続的な接続を確立します。
  2. 双方向通信: クライアントとサーバーは同時にメッセージを送受信でき、真の双方向通信を実現します。
  3. ヘッダー圧縮: Websocket は圧縮にバイナリ ヘッダーを使用して、データ送信のオーバーヘッドを削減します。
  4. ハートビートのメンテナンス: Websocket は、接続をアクティブに保つためにハートビート情報を送信できます。

2. Websocket の PHP 開発のためのツールの選択:
PHP 自体は Websocket をネイティブにサポートしませんが、サードパーティのライブラリを通じて実装できます。この記事では、Ratchet ライブラリを使用して Websocket を実装することを選択します。

Ratchet は、Websocket 開発プロセスを簡素化する強力なツールとインターフェイスを提供する PHP Websocket ライブラリです。

3. プロジェクトの準備:
まず、Composer がプロジェクトにインストールされていることを確認し、コマンド ラインで次のコマンドを実行して Ratchet ライブラリをインストールします:

composer require cboden /ratchet

インストールが成功したら、新しい PHP ファイル (例:index.php) を作成し、Websocket サーバーのコードの作成を開始します。

4. サーバー コードの例:
以下は、リアルタイム フライト クエリの機能を実装する Websocket サーバーの簡単なコード例です。

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

上記のコードは、ポート 8080 で実行され、クライアント メッセージを受信して​​フライト クエリを実行し、クエリ結果をすべてのクライアントに送信する単純な Websocket サーバーを実装しています。

5. クライアント コードの例:
以下は、WebSocket サーバーとの接続とメッセージの送受信を実現する、単純な HTML ページのサンプル コードです。

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

上記のコードは、便名を入力してクエリ リクエストを送信するための入力ボックスとボタンを含む、単純な HTML ページを実装しています。クエリ結果はリアルタイムでページに表示されます。

6. 実行とテスト:
上記のサーバー コードを Index.php に保存し、クライアント コードを HTML ファイルに保存します。ブラウザで HTML ファイルを開いて、実行してテストします。フライトクエリ機能。

概要:
上記の Websocket 開発ガイドとコード例を通じて、リアルタイム フライト クエリの機能を実現できます。 Websocket の双方向通信機能により、クライアントとサーバーがリアルタイムでメッセージを通信できるようになり、アプリケーションのリアルタイム性と応答性が向上します。 Ratchet ライブラリを使用すると、Websocket アプリケーションをより迅速に開発できます。

もちろん、実際の開発では、特定のビジネス ニーズに基づいてさらなる開発や調整が必要になる場合がありますが、この記事で提供されているサンプル コードは参考および基本的な使用を目的としています。 Websocket 開発の成功を祈っています。

以上がリアルタイム フライト クエリ機能を実装するための PHP Websocket 開発ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。