検索
ホームページPHPフレームワークWorkermanWorkerman ドキュメントのサーバー クラスターの実装方法

Workerman ドキュメントのサーバー クラスターの実装方法

Workerman は、PHP が非同期ネットワーク通信をより効率的に処理できるようにする高性能 PHP ソケット フレームワークです。 Workerman のドキュメントには、サーバー クラスターの実装方法に関する詳細な手順とコード例が記載されています。

サーバー クラスターを実装するには、まずサーバー クラスターの概念を明確にする必要があります。サーバー クラスターは複数のサーバーをネットワークに接続し、負荷とリソースを共有することでシステムのパフォーマンス、信頼性、拡張性を向上させます。 Workerman では、サーバー クラスタリングは 2 つの方法で実装できます。1 つは中央ロード バランサを使用する方法、もう 1 つは分散共有メモリを使用する方法です。

  1. セントラル ロード バランサの使用 (ロード バランサ)
    セントラル ロード バランサは、分散システムの主要コンポーネントの 1 つです。クライアントからリクエストを受信し、クラスター内のさまざまなサーバーにリクエストを分散します。 Workerman では、中央のロード バランサとして機能する別の PHP スクリプトを作成することで、この機能を実現できます。

まず、Workerman をインストールする必要があります。 Composer を通じてインストールすることも、ソース コードを直接ダウンロードして Autoloader.php ファイルを導入することもできます。次に、balancer.php という名前の PHP スクリプトを作成します。スクリプトでは、まず Workerman の Autoloader ファイルを導入し、関連するクラス ライブラリをロードする必要があります。

<?php
require_once '/path/to/your/workerman/Autoloader.php';
use WorkermanWorker;
use WorkermanProtocolsHttp;

次に、クライアントのリクエストをリッスンし、そのリクエストをクラスター内のサーバーに分散するワーカー インスタンスを作成します。

$balancer = new Worker('tcp://0.0.0.0:8080');
$balancer->name = 'LoadBalancer';
$balancer->count = 4;

$balancer->onConnect = function($connection) {
    // 连接到达时,选择一个服务器进行负载均衡
    $servers = array('tcp://server1.com:8888', 'tcp://server2.com:8888', 'tcp://server3.com:8888');
    $connection->backendConnection = new Connection($servers[array_rand($servers)]);
};

$balancer->onMessage = function($connection, $data) {
    // 接收到消息时,将消息发送给后端服务器
    $connection->backendConnection->send($data);
};

$balancer->onClose = function($connection) {
    // 连接关闭时,关闭后端服务器的连接
    $connection->backendConnection->close();
};

上記のコードは、LoadBalancer という名前の Worker インスタンスを作成し、ポート 8080 をリッスンします。接続が到着するたびに、サーバーをランダムに選択することによって、接続がバックエンド サーバーに分散されます。メッセージを受信すると、メッセージはバックエンド サーバーに送信されます。接続が閉じられたら、バックエンド サーバーへの接続を閉じます。

最後に、balancer.php スクリプトを実行し、ターミナルで次のコマンドを実行します。

php balancer.php start

ロード バランサーを開始した後、クライアントのリクエストをクラスター内の各サーバーに分散できます。

  1. 分散共有メモリの使用

分散共有メモリは、複数のサーバー間で共有されるデータを保存するテクノロジです。 Workerman では、Redis を分散共有メモリとして使用できます。 Redis は、永続ストレージをサポートし、豊富なデータ構造と操作コマンドを提供するオープンソースのインメモリ データベースです。

分散共有メモリを使用するには、最初に Redis サーバーをインストールして構成する必要があります。次に、Workerman のスクリプトで、Redis 接続を使用してデータを共有できます。

<?php
require_once '/path/to/your/workerman/Autoloader.php';
use WorkermanWorker;
use WorkermanProtocolsHttp;
use WorkermanConnectionAsyncTcpConnection;

$worker = new Worker('tcp://0.0.0.0:8888');
$worker->name = 'Server';
$worker->onWorkerStart = function($worker) {
    // 连接Redis服务器
    $redis_connection = new AsyncTcpConnection('tcp://redis.server:6379');
    $redis_connection->connect();
    
    // 将服务器的信息保存到Redis
    $worker->addListener = function($connection) use($redis_connection) {
        $redis_connection->lPush('servers', $connection->getRemoteAddress());
    };
    
    // 从Redis获取服务器列表,用于负载均衡
    $worker->onMessage = function($connection, $data) use($redis_connection) {
        $redis_connection->lRange('servers', 0, -1, function($result) use($connection, $data) {
            // 根据负载均衡策略选择一个服务器
            $server = $result[array_rand($result)];
            
            // 将消息发送给选定的服务器
            $backend_connection = new AsyncTcpConnection('tcp://' . $server);
            $backend_connection->send($data);
            
            // 接收后端服务器的响应,并发送给客户端
            $backend_connection->onMessage = function($connection, $backend_data) use($connection) {
                $connection->send($backend_data);
            };
            
            // 关闭后端服务器的连接
            $backend_connection->onClose = function($connection) {
                $connection->close();
            };
        });
    };
    
    // 在服务器关闭时,从Redis中移除服务器的信息
    $worker->onClose = function($connection) use($redis_connection) {
        $remote_address = $connection->getRemoteAddress();
        $redis_connection->lRem('servers', $remote_address, 1);
    };
};

上記のコードは、Server という名前の Worker インスタンスを作成し、ポート 8888 をリッスンします。 Worker インスタンスの onWorkerStart コールバック関数では、最初に Redis サーバーに接続し、その後クライアント要求が受信されるたびに、Redis 接続を通じてサーバーのリストが取得され、負荷分散ポリシーに従ってサーバーが選択され、リクエストはサーバーに転送されます。バックエンドサーバーからの応答を受信したら、クライアントに応答を返します。サーバーがシャットダウンされたら、Redis からサーバー情報を削除します。

最後に、server.php スクリプトを実行し、ターミナルで次のコマンドを実行します。

php server.php start

サーバーを起動した後、クライアント経由でサーバーに接続し、負荷分散を実現できます。

上記の 2 つの方法により、Workerman フレームワークを使用してサーバー クラスターを実装できます。中央ロード バランサーを使用する場合でも、分散共有メモリを使用する場合でも、システムのパフォーマンスと信頼性を向上させて、大規模なアプリケーションのニーズを満たすことができます。もちろん、実際のアプリケーションでは、特定のシナリオとニーズに基づいてサーバー クラスターの実装をさらに最適化および拡張できます。

以上がWorkerman ドキュメントのサーバー クラスターの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Workermanの組み込みWebsocketクライアントの主な機能は何ですか?Workermanの組み込みWebsocketクライアントの主な機能は何ですか?Mar 18, 2025 pm 04:20 PM

WorkermanのWebSocketクライアントは、非同期通信、高性能、スケーラビリティ、セキュリティなどの機能とのリアルタイム通信を強化し、既存のシステムと簡単に統合します。

リアルタイムのコラボレーションツールを構築するためにWorkermanを使用する方法は?リアルタイムのコラボレーションツールを構築するためにWorkermanを使用する方法は?Mar 18, 2025 pm 04:15 PM

この記事では、リアルタイムのコラボレーションツールを構築するために、高性能PHPサーバーであるWorkermanを使用して説明します。インストール、サーバーのセットアップ、リアルタイム機能の実装、既存のシステムとの統合をカバーし、Workermanのキーfを強調します

低遅延アプリケーションのためにWorkermanを最適化する最良の方法は何ですか?低遅延アプリケーションのためにWorkermanを最適化する最良の方法は何ですか?Mar 18, 2025 pm 04:14 PM

この記事では、非同期プログラミング、ネットワーク構成、リソース管理、データ転送の最小化、負荷分散、定期的な更新に焦点を当てた低遅延アプリケーションのWorkermanの最適化について説明します。

WorkermanおよびMySQLとのリアルタイムデータの同期を実装する方法は?WorkermanおよびMySQLとのリアルタイムデータの同期を実装する方法は?Mar 18, 2025 pm 04:13 PM

この記事では、WorkermanとMySQLを使用したリアルタイムデータ同期の実装、セットアップ、ベストプラクティス、データの一貫性の確保、一般的な課題への対処に焦点を当てています。

サーバーレスアーキテクチャでWorkermanを使用するための重要な考慮事項は何ですか?サーバーレスアーキテクチャでWorkermanを使用するための重要な考慮事項は何ですか?Mar 18, 2025 pm 04:12 PM

この記事では、Swaremanをサーバーレスアーキテクチャに統合し、スケーラビリティ、ステートレス性、コールドスタート、リソース管理、統合の複雑さに焦点を当てています。 Workermanは、高い並行性を通じてパフォーマンスを向上させ、Cold STAを減らします

Workermanで高性能のeコマースプラットフォームを構築する方法は?Workermanで高性能のeコマースプラットフォームを構築する方法は?Mar 18, 2025 pm 04:11 PM

この記事では、Workermanを使用して高性能のeコマースプラットフォームの構築について説明し、Websocketのサポートやスケーラビリティなどの機能に焦点を当て、リアルタイムの相互作用と効率を向上させます。

WorkermanのWebsocketサーバーの高度な機能は何ですか?WorkermanのWebsocketサーバーの高度な機能は何ですか?Mar 18, 2025 pm 04:08 PM

WorkermanのWebSocketサーバーは、一般的な脅威に対するスケーラビリティ、低レイテンシ、セキュリティ対策などの機能とのリアルタイム通信を強化します。

リアルタイム分析ダッシュボードを構築するためにWorkermanを使用する方法は?リアルタイム分析ダッシュボードを構築するためにWorkermanを使用する方法は?Mar 18, 2025 pm 04:07 PM

この記事では、高性能PHPサーバーであるWorkermanを使用して、リアルタイム分析ダッシュボードを構築することについて説明します。これは、React、Vue.JS、Angularなどのフレームワークとのインストール、サーバーのセットアップ、データ処理、フロントエンドの統合をカバーしています。キーfeatur

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。