PHP バックエンド API 開発で WebSocket および AMQP メッセージ キューを処理する方法

WBOY
リリース: 2023-06-17 16:56:02
オリジナル
1194 人が閲覧しました

インターネットとモバイル デバイスの普及により、最新の Web アプリケーションはコンテンツを表示する単なる静的なページではなく、より複雑でインタラクティブな動的アプリケーションになりました。この変更では、ユーザーのニーズを満たし、迅速に対応できるように、バックエンド API の技術実装もアップグレードする必要があります。その中でも、WebSocket と AMQP メッセージ キューの処理は、バックエンド API 開発における 2 つの非常に重要かつ一般的な技術手段となっています。

WebSocket は、リアルタイム通信とプッシュの実現に役立つ全二重通信プロトコルで、Web アプリケーションがより効率的なデータ対話と優れたユーザー エクスペリエンスを実現できるようにします。従来の HTTP 要求/応答モデルとは異なり、WebSocket を使用すると、オープンな接続を介して継続的なメッセージを送受信できます。この長時間接続メカニズムにより、サーバーとの安定した通信が維持され、頻繁な接続と切断が回避されます。

WebSocket を処理するバックエンド API では、通常、次の手順を実装する必要があります。

  1. WebSocket 接続を確立し、連続接続時間やメッセージなどの関連パラメーターを設定します。フォーマット。
  2. WebSocket メッセージ イベントをリッスンし、クライアントがメッセージを送信するのを待ちます。
  3. クライアントのメッセージに応答し、ビジネス処理を実行します。
  4. 必要に応じてメッセージをクライアントにプッシュします。

WebSocket の実装には、Ratchet や PHP-Websockets などの PHP の WebSocket ライブラリを使用できます。これらのライブラリは、WebSocket サーバーを迅速に構築するのに役立つ便利で使いやすい API とイベントを提供すると同時に、アプリケーション間のデータ交換と通信もサポートします。 PHP スクリプトを記述するだけで、クライアントとの対話を完了できます。具体的な実装については、次のサンプル コードを参照してください。

require 'vendor/autoload.php';

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

class WebSocketServer implements MessageComponentInterface
{
    protected $clients;

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

    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        echo "New client connected {$conn->resourceId}
";
    }

    public function onMessage(ConnectionInterface $from, $msg)
    {
        foreach ($this->clients as $client) {
            if ($from === $client) {
                continue;
            }
            $client->send($msg);
        }
    }

    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Client {$conn->resourceId} disconnected
";
    }

    public function onError(ConnectionInterface $conn, Exception $e)
    {
        echo "WebSocket Error: {$e->getMessage()}
";
        $conn->close();
    }
}

$loop = ReactEventLoopFactory::create();
$webSocketServer = new RatchetServerIoServer(
    new RatchetHttpHttpServer(
        new RatchetWebSocketWsServer(
            new WebSocketServer()
        )
    ),
    $loop
);

echo "WebSocket server started
";
$webSocketServer->run();
ログイン後にコピー

WebSocket に加えて、AMQP (Advanced Message Queuing Protocol) メッセージ キューも PHP バックエンド API の重要な部分です。メッセージ キューは、さまざまな種類のサービスを分離し、同時に処理するために使用できる非同期メッセージング パターンです。 Web アプリケーションでは、メッセージ キューを使用して、多数の対話型操作、高負荷タスク、データ処理などの重いワークロードを処理できます。メッセージ キューを非同期的に使用すると、Web アプリケーションのパフォーマンスと応答速度を最適化し、長時間の待機やブロックを回避できます。

AMQP メッセージ キューを処理するバックエンド API では、通常、次の手順を完了する必要があります。

  1. AMQP 接続を作成し、アドレス、アカウントなどの接続パラメーターを設定する、パスワード。
  2. AMQP キューまたはスイッチを宣言します。
  3. AMQP メッセージをパブリッシュまたは消費します。
  4. メッセージを処理し、新しいメッセージの生成やデータの更新などの後続の操作を実行します。

PHP での一般的な AMQP 実装には、php-amqplib や pecl-amqp などのライブラリが含まれます。これらのライブラリを通じて、PHP で AMQP メッセージ キューを簡単に使用し、メッセージを迅速に公開および消費できます。以下は、php-amqplib を使用して実装された AMQP サンプル コードです。

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('hello', false, false, false, false);

$callback = function ($msg) {
    echo 'Received: ', $msg->body, PHP_EOL;
};

$channel->basic_consume('hello', '', false, true, false, false, $callback);

echo "Waiting for messages. To exit press CTRL+C
";
while (count($channel->callbacks)) {
    $channel->wait();
}
ログイン後にコピー

上記のサンプル コードを通じて、WebSocket および AMQP メッセージ キューを簡単に処理し、Web アプリケーションのパフォーマンスと応答速度を向上させることができます。

以上がPHP バックエンド API 開発で WebSocket および AMQP メッセージ キューを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!