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

リアルタイムタスク分散機能を実現するためのPHP Websocket開発ガイド

WBOY
WBOYオリジナル
2023-12-02 10:17:331195ブラウズ

PHP Websocket开发指南,实现实时任务分发功能

PHP Websocket 開発ガイドでは、リアルタイム タスク分散機能を実装するには、特定のコード例が必要です

はじめに:
最新の Web アプリケーションでは、リアルタイム タスク流通機能はますます重要になっています。リアルタイムのタスク配布を通じて、リアルタイムのコミュニケーションとリアルタイムの更新が実現され、ユーザーにより良いインタラクティブなエクスペリエンスが提供されます。 PHP Websocket はリアルタイム通信を実現するための技術であり、本記事ではリアルタイムタスク配信機能の理解と実装に役立つように、PHP Websocket の基本原理と使い方、具体的なコード例を紹介します。

セクション 1: Websocket とは
Websocket は、TCP 接続上で確立され、ハンドシェイク プロセスを通じてサーバーとクライアント間のリアルタイムの双方向通信を実現する全二重通信プロトコルです。 。従来の HTTP プロトコルと比較して、Websocket はネットワーク遅延が短く、リアルタイム パフォーマンスが高くなります。

セクション 2: PHP Websocket の原理
PHP Websocket の動作原理は、次の手順で簡単に説明できます。

  1. サーバーの起動: PHP コマンドを使用してサーバーを起動します。ラインモードのWebSocketサーバー。
  2. ハンドシェイク プロセス: クライアントが HTTP リクエストをサーバーに送信すると、サーバーはリクエストを検証し、ハンドシェイク接続を確立します。
  3. 接続の確立: ハンドシェイクによる接続後、サーバーとクライアントの間に永続的な接続が確立され、双方向通信が可能になります。
  4. データ送信: Websocket プロトコルを介してサーバーとクライアントの間でデータを送信し、すぐに応答できます。

セクション 3: PHP Websocket の使用方法
PHP Websocket は、Ratchet や Swoole などの PHP ライブラリを通じて実装できます。以下では例として Ratchet を使用します。

ステップ 1: Ratchet ライブラリをインストールする
まず、Composer コマンドを使用して Ratchet ライブラリをインストールする必要があります。コマンド ラインで次のコマンドを実行します。

composer require cboden/ratchet

ステップ 2: Websocket サーバーの作成
プロジェクト フォルダーに server.php ファイルを作成し、そのファイルに次のコードを記述します。

use RatchetMessageComponentInterface;
use RatchetConnectionInterface;

require 'vendor/autoload.php';

class MyWebSocket 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) {
        // Task distribution logic
        foreach ($this->clients as $client) {
            $client->send($msg);
        }
    }

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

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

$app = new RatchetApp('localhost', 8080);
$app->route('/', new MyWebSocket, ['*']);
$app->run();

ステップ 3: Websocket サーバーを実行する
コマンド ラインで次のコマンドを実行して、Websocket サーバーを開始します。

php server.php

ステップ 4: Websocket クライアントを作成する
プロジェクト フォルダー client.html ファイルを作成し、そのファイルに次のコードを記述します。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Websocket Client</title>
</head>
<body>
    <script type="text/javascript">
        const socket = new WebSocket('ws://localhost:8080');
        socket.onopen = function() {
            console.log('Connected to server');
        };
        socket.onmessage = function(e) {
            console.log('Received message:', e.data);
        };
        socket.onclose = function() {
            console.log('Connection closed');
        };
    </script>
</body>
</html>

ステップ 5: Websocket 通信のテスト
client.html## を開きます。ブラウザ # を開き、開発者ツールを開くと、コンソールに接続成功のログが表示されます。この時点で、サーバーとクライアントの間に Websocket 接続が確立され、リアルタイム通信が可能になります。

セクション 4: リアルタイム タスク分散機能の実装

PHP Websocket を使用すると、リアルタイム タスク分散機能を簡単に実装できます。ステップ 2 のコードでは、
onMessage メソッドがタスク分散のロジックを定義していることがわかります。サーバーは、クライアントから送信されたタスク データを受信すると、接続されているすべてのクライアントを横断し、send メソッドを使用して各クライアントにタスク データを送信します。

サンプルコードは次のとおりです:

public function onMessage(ConnectionInterface $from, $msg) {
    // Task distribution logic
    foreach ($this->clients as $client) {
        $client->send($msg);
    }
}

結論:

上記の手順を通じて、PHP Websocket の基本原理と使用法を学習し、リアルタイムの実装方法を紹介しました。タスク分散機能。 PHP Websocket を使用すると、リアルタイム通信とリアルタイム更新を簡単に実現でき、ユーザー インタラクション エクスペリエンスが向上します。この記事が PHP Websocket の理解と使用に役立つことを願っています。

参考資料:

    Ratchet公式サイト:https://github.com/ratchetphp/Ratchet
  1. Swoole公式サイト:https://www.swoole .com /

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

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