ホームページ  >  記事  >  バックエンド開発  >  phpを使用してWebsocketを開発し、リアルタイムの物流追跡機能を作成します

phpを使用してWebsocketを開発し、リアルタイムの物流追跡機能を作成します

王林
王林オリジナル
2023-12-18 15:39:43669ブラウズ

phpを使用してWebsocketを開発し、リアルタイムの物流追跡機能を作成します

PHP を使用して WebSocket を開発し、リアルタイム物流追跡機能を作成します。

はじめに:
物流業界の発展に伴い、貨物のリアルタイム追跡が可能になりました。ステータスが重要な要件になっています。これまで、ポーリングベースで貨物情報を取得する方法では、リアルタイムの要件を満たすことができませんでした。 WebSocket テクノロジーを使用すると、サーバーはデータをクライアントにアクティブにプッシュし、リアルタイムの物流追跡機能を提供できます。

この記事では、PHP を使用して WebSocket を開発する方法を紹介し、リアルタイムの物流追跡機能を実装するための具体的なコード例を示します。

  1. WebSocket の概要
    WebSocket は、単一の TCP 接続を介した全二重通信のためのプロトコルです。永続的な接続を維持することで、サーバーからクライアントへのリアルタイムのデータ プッシュを実装します。従来の HTTP リクエストと比較して、WebSocket はリアルタイム要件の高いアプリケーション シナリオにより適しています。
  2. PHP 開発 WebSocket
    PHP では、Ratchet ライブラリを使用して WebSocket 関数を実装できます。 Ratchet は、WebSocket サーバーを簡単に開発するためのインターフェイスを提供する PHP ベースの WebSocket ライブラリです。

まず、Ratchet ライブラリをプロジェクトに導入する必要があります。 Composer を通じてプロジェクトの依存関係を管理できます。次のコマンドを使用して Ratchet ライブラリをインストールします:

composer require cboden/ratchet

次に、WebSocket サーバーのエントリ ファイル (server.php など) を作成します:

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

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;
use RatchetServerIoServer;
use RatchetHttpHttpServer;
use RatchetWebSocketWsServer;

class MyWebSocketApp implements MessageComponentInterface
{
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        // 处理收到的消息,更新物流信息等
        // 然后向所有客户端主动推送最新的物流信息
        foreach ($this->clients as $client) {
            $client->send($msg);
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        $conn->close();
    }
}

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new MyWebSocketApp()
        )
    ),
    8080
);

$server->run();

上記のコードでは、Ratchet の MessageComponentInterface インターフェイスを実装する MyWebSocketApp というクラスを作成しました。このインターフェイスは、onOpen、onMessage、onClose、onError など、WebSocket サーバーの基本操作コールバック関数を定義します。

onOpen コールバック関数で、新しいクライアント接続を $clients オブジェクト ストレージに追加します。メッセージを受信すると、onMessage コールバック関数で、物流情報の更新など、受信したメッセージを処理し、foreach ループを通じてすべてのクライアントを横断して、最新の物流情報をクライアントにアクティブにプッシュできます。

最後に、IoServer クラスを使用して WebSocket サーバー インスタンスを作成し、リスニング ポート番号を指定し、run メソッドを使用してサーバーを起動します。

  1. クライアント実装
    クライアント側では、ブラウザの組み込み WebSocket API を使用して WebSocket サーバーと通信できます。
<!DOCTYPE html>
<html>
<head>
<script>
var ws = new WebSocket("ws://localhost:8080");

ws.onopen = function() {
    console.log("Socket连接已打开");
};

ws.onmessage = function(evt) {
    // 处理接收到的物流信息,并在页面上进行展示
    var message = evt.data;
    console.log("收到消息:" + message);
    // ...
};

ws.onclose = function() {
    console.log("Socket连接已关闭");
};

</script>
</head>
<body>
</body>
</html>

上記のコードでは、WebSocket オブジェクトを作成し、WebSocket サーバーのアドレスとポートを指定します。その後、onopen、onmessage、onclose などのコールバック関数を通じてサーバーとの対話を処理できます。

WebSocket 接続が正常に確立されると、onopen コールバック関数がトリガーされ、ここで関連する操作を実行できます。サーバーによってプッシュされたメッセージが受信されると、onmessage コールバック関数がトリガーされ、受信したロジスティクス情報を処理してページに表示できます。接続が閉じられると、onclose コールバック関数がトリガーされます。

  1. 物流追跡機能例
    実際の物流システムと組み合わせて、リアルタイムの物流情報をクライアントへプッシュできます。

サーバー側では、スケジュールされたタスクやイベント監視を通じて物流情報の更新を監視し、最新の物流情報をクライアントにプッシュできます。

// 假设我们有一个函数getLogisticsInfo,用于获取最新的物流信息
$logisticsInfo = getLogisticsInfo();
// 将最新的物流信息转为JSON格式,并推送给所有客户端
$msg = json_encode($logisticsInfo);
foreach ($this->clients as $client) {
    $client->send($msg);
}

クライアント側では、サーバーからプッシュされた最新の物流情報を受信し、表示することができます。

ws.onmessage = function(evt) {
    var message = evt.data;
    var logisticsInfo = JSON.parse(message);
    // 根据最新物流信息,更新页面显示内容
    // ...
};

概要:
WebSocketをPHPで開発することで、リアルタイムのデータプッシュによる物流追跡機能を実現できます。 Ratchet ライブラリを使用して WebSocket サーバーを開発し、WebSocket API を通じてサーバーと対話します。サーバーは、スケジュールされたタスクやイベント監視を通じて最新の物流情報を取得してクライアントにプッシュすることで、リアルタイムの物流追跡機能を実現します。
この記事で提供されているコード例を通じて、PHP をよりよく理解し、WebSocket を開発し、リアルタイムの物流追跡機能を実装するために使用することができます。

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

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