ホームページ >バックエンド開発 >PHPチュートリアル >php を使用して Websocket を開発し、リアルタイムの天気予報機能を作成します

php を使用して Websocket を開発し、リアルタイムの天気予報機能を作成します

王林
王林オリジナル
2023-12-18 10:10:151322ブラウズ

php を使用して Websocket を開発し、リアルタイムの天気予報機能を作成します

PHP を使用して WebSocket を開発し、リアルタイムの天気予報機能を作成します

はじめに
WebSocket は、クライアントとサーバー間で確立できるネットワーク通信プロトコルです。サーバー 永続的な接続により、双方向のリアルタイム通信が可能になります。 Web 開発では、WebSocket はインスタント チャット、リアルタイム プッシュ、リアルタイム データ更新などのシナリオで広く使用されています。この記事では、PHPを使用してリアルタイム天気予報機能を実装するWebSocketを開発する方法を紹介します。

ステップ 1: WebSocket サーバーを作成する
まず、クライアント接続とメッセージ送信を処理する WebSocket サーバーを作成する必要があります。 PHP では、Ratchet ライブラリを使用して WebSocket サーバーの機能を実装できます。

  1. まず、Composer がインストールされていることを確認します。Composer は、PHP の依存関係管理ツールです。
  2. 新しい PHP プロジェクトを作成し、プロジェクト ディレクトリに新しい Composer.json ファイルを作成し、次の内容を追加します。
{
    "require": {
        "cboden/ratchet": "^0.4"
    }
}
  1. プロジェクト ディレクトリで、 # を実行します。 ##composer install コマンドを使用して、Ratchet ライブラリをインストールします。
  2. server.php という名前の新しい PHP ファイルを作成して、WebSocket サーバーのメイン ロジックを実装します。
  3. <?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();
    
上記のコードでは、WebSocket サーバーのさまざまなイベント処理メソッドを含む Ratchet の MessageComponentInterface インターフェイスを実装する WeatherForecast という名前のクラスを作成しました。 、onClose、onMessage など。これらのメソッドに特定のロジックを記述して、クライアントの接続、切断、メッセージ送信を処理できます。

WeatherForecast クラスでは、接続されているすべてのクライアントにメッセージをブロードキャストするための BroadcastingMessage メソッドも定義します。

最後に、HttpServer、WsServer、WeatherForecast の 3 つのオブジェクトを IoServer のファクトリ メソッドを使用して接続し、サーバーのポート番号を 8080 に指定します。

ステップ 2: 天気予報 API にアクセスする

次に、リアルタイムの天気予報データを取得し、接続されているクライアントに送信する必要があります。この記事では、公開天気予報 API を使用しますが、実際のニーズに基づいて他の API を選択することもできます。

WeatherForecast クラスの onOpen メソッドで、HTTP リクエストを開始して天気予報データを取得できます。コード例は次のとおりです。

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);

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

このうち、YOUR_API_KEY は API キーに置き換える必要があり、クエリされる都市は実際のニーズに応じて変更する必要があります。

ステップ 3: リアルタイムの天気予報データを送信する

天気予報データを取得したら、WebSocket サーバー経由で接続されているクライアントにデータを送信できます。

WeatherForecast クラスの onOpen メソッドで、broadcastMessage メソッドを呼び出して、接続されているすべてのクライアントにメッセージをブロードキャストできます。コード例は次のとおりです。

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']);
}

上記のコードでは、天気予報データの現在のフィールドをメッセージ コンテンツとして使用し、broadcastMessage メソッドを通じて接続されているすべてのクライアントにブロードキャストします。

WeatherForecast クラスの onMessage メソッドでは、クライアントから送信されたメッセージを処理し、実際のニーズに応じて対応するデータを送信できます。コード例は次のとおりです。

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']);
    }
}

上記のコードでは、クライアントが getWeather メッセージを送信すると、HTTP リクエストを再度開始して最新の天気予報データを取得し、クライアントに送信します。

ステップ 4: クライアントのアクセスと表示

最後に、リアルタイムの天気予報データにアクセスして表示するクライアント コードを記述する必要があります。この記事では、JavaScript を使用してクライアント側の機能を実装します。

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

上記のコードでは、WebSocket オブジェクトを作成し、サーバー アドレスを ws://localhost:8080 として指定します。 onopen イベントでは、getWeather メッセージをサーバーに送信して、サーバーがリアルタイムの天気予報データを送信するようにトリガーしました。 onmessage イベントでは、サーバーから送信されたメッセージを処理し、Web ページに表示します。

まとめ

WebSocketをPHPで開発することで、リアルタイム天気予報機能を実現できます。 WebSocket サーバーを通じて、クライアントとサーバー間の双方向のリアルタイム通信を実現できます。天気予報APIにアクセスし、リアルタイムの天気予報データを送信することで、接続しているクライアントに最新の天気予報データをタイムリーに送信し、クライアント上で表示することができます。この方法は、リアルタイムの天気予報のニーズを満たすだけでなく、他のリアルタイム データ プッシュ シナリオにも適用できます。

以上がphp を使用して Websocket を開発し、リアルタイムの天気予報機能を作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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