ホームページ  >  記事  >  バックエンド開発  >  リアルタイム交通情報クエリ機能を実装するためのPHP Websocket開発ガイド

リアルタイム交通情報クエリ機能を実装するためのPHP Websocket開発ガイド

王林
王林オリジナル
2023-12-04 10:30:281151ブラウズ

PHP Websocket开发指南,实现实时交通信息查询功能

リアルタイム交通情報照会機能を実現する PHP Websocket 開発ガイド

  1. まえがき
    Websocket は、インターネット上の双方向通信を実現する技術です。 Web: リアルタイムでデータを更新できるため、リアルタイムの対話が必要なシナリオに適しています。この記事では、PHP を使用してリアルタイム交通情報クエリ機能を開発する方法と、対応するコード例を紹介します。
  2. 準備
    開発を開始する前に、次の作業を準備する必要があります。
  3. PHP および Apache サーバーがインストールされたホスト、および基本的な PHP プログラミングの知識
  4. ブラウザChrome、Firefox などの Websocket をサポートするもの。
  5. Composer をインストールして関連する依存ライブラリをインストールする
  6. 開発を開始する
    3.1 Websocket 依存ライブラリをインストールする
    Composer のインストールにパスするRatchet ライブラリは、PHP で Websocket アプリケーションを開発するための一般的な選択肢です。ターミナルで次のコマンドを実行してインストールできます:

    composer require cboden/ratchet

3.2 Websocket サーバーの作成
プロジェクト ルートで、ディレクトリに server.php ファイルを作成し、次のコードを追加します。

<?php
require 'vendor/autoload.php';

use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new TrafficInfo()
        )
    ),
    8080 // 服务器端口号
);

$server->run();

このコードは、Websocket サーバーを作成し、ポート 8080 をリッスンします。このうち、TrafficInfo は、これから作成する Websocket アプリケーション クラスです。

3.3 Websocket アプリケーション クラスの作成
プロジェクト ルート ディレクトリに TrafficInfo.php ファイルを作成し、次のコードを追加します。

<?php
use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class TrafficInfo implements MessageComponentInterface
{
    private $connections;

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

    public function onOpen(ConnectionInterface $conn)
    {
        // 当一个新的连接建立时触发
        $this->connections->attach($conn);
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 当接收到客户端发送的消息时触发
        // 在这里处理相应的逻辑,并将数据发送给所有连接的客户端
        $this->broadcast($msg);
    }

    public function onClose(ConnectionInterface $conn)
    {
        // 当一个客户端连接关闭时触发
        $this->connections->detach($conn);
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        // 当发生错误时触发
        $conn->send($e->getMessage());
        $conn->close();
    }

    private function broadcast($msg)
    {
        foreach ($this->connections as $conn) {
            $conn->send($msg);
        }
    }
}

このコードは ## を定義します。 #TrafficInfo クラスを作成し、MessageComponentInterface インターフェイスを実装します。このクラスでは、onOpenonMessageonCloseonError などのメソッドをオーバーライドして、クライアントとの対話を処理します。接続されているすべてのクライアントにデータを送信するための broadcast メソッドを実装します。

    クライアント コード
  1. プロジェクト ルート ディレクトリに
    index.html ファイルを作成し、次のコードを追加します。
  2. <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Traffic Info</title>
    </head>
    <body>
        <h1>Traffic Info</h1>
    
        <div id="traffic-info"></div>
    
        <script>
            var socket = new WebSocket('ws://localhost:8080');
    
            socket.onmessage = function (event) {
                var data = JSON.parse(event.data);
                // 处理接收到的实时交通信息
                document.getElementById('traffic-info').innerHTML = data.message;
            };
    
            socket.onclose = function () {
                // 服务器连接关闭时触发
                console.log('Connection closed');
            };
        </script>
    </body>
    </html>
この段落コードは Websocket 接続を作成し、サーバーからのメッセージをリッスンします。メッセージを受信すると、データが JSON 形式に解析され、リアルタイムの交通情報がページに表示されます。

  1. プログラムの実行

    上記のファイルを Apache サーバーのルート ディレクトリに配置し、コマンド ラインを使用してプロジェクトのルート ディレクトリに入り、次のコマンドを実行して開始します。 Websocket サーバー:

    php server.php

ブラウザで

index.html ファイルを開いて、リアルタイムの交通情報を受信します。

これまでに、PHPで開発したリアルタイム交通情報照会機能を完成させ、Websocketによるサーバーとクライアント間のリアルタイム双方向通信を実現しました。独自のニーズに応じてさらに開発および最適化できます。

概要

この記事では、PHP を使用したリアルタイム交通情報クエリ機能の開発プロセスと、対応するコード例を紹介します。 Websocket テクノロジーは、リアルタイムのデータ更新と対話の実現に優れたパフォーマンスを発揮し、多くのリアルタイム通信のニーズを満たすことができます。この記事があなたのお役に立てれば幸いです、読んでいただきありがとうございます!

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

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