ホームページ >バックエンド開発 >PHPチュートリアル >PHPとSwooleの統合により高同時サーバー開発を実現

PHPとSwooleの統合により高同時サーバー開発を実現

WBOY
WBOYオリジナル
2023-06-25 13:42:56981ブラウズ

インターネット技術の継続的な発展に伴い、サーバーの高い同時実行パフォーマンスに対する要件はますます高くなっています。この需要を満たすために、同時実行性の高いサーバーを開発することが重要な研究方向になっています。

サーバー開発において、PHP は人気のあるサーバーサイド スクリプト言語として、多くの Web サイトやアプリケーションの中核となっています。 Swoole は、PHP 拡張機能として、同時実行性の高いサーバーの構築に使用できる、新しい高性能のイベント駆動型同時実行フレームワークを提供します。

この記事では、PHP と Swoole を統合して高同時実行性のサーバー開発を実現する方法を紹介し、Swoole で一般的に使用されるいくつかのコンポーネントとテクノロジについて説明します。

1. PHP と Swoole の統合

1.1 Swoole 拡張機能のインストール

PHP と Swoole を統合する前に、Swoole 拡張機能を PHP 環境にインストールする必要があります。 Swoole の公式 Web サイトでは、Windows および Linux プラットフォームのインストール方法を含む詳細なインストール ドキュメントが提供されています。

Linux プラットフォームの場合、ソース コードと pecl を使用してインストールできます:

ソース コードを使用してインストール:

$ wget https://github.com/swoole/swoole-src/archive/v4.7.1.tar.gz
$ tar zxvf v4.7.1.tar.gz
$ cd swoole-src-4.7.1
$ phpize
$ ./configure
$ make
$ sudo make install

pecl を使用してインストール:

$ pecl install swoole

「インストールが完了したら、php.ini ファイルに次の構成を追加する必要があります。

extension=swoole.so

1.2 Swoole サーバーの作成

Swoole サーバーの作成プロセスは、次の手順と非常によく似ています。 PHP を使用して HTTP サーバーを作成することです。まずサーバー オブジェクトを作成し、サーバーのリスニング IP とポートを指定して、関連するコールバック関数を設定する必要があります。

サンプルコードは以下の通りです:

$server = new SwooleServer($host, $port, SWOOLE_PROCESS, SWOOLE_SOCK_TCP); 
$server->on('Start', 'onStart'); 
$server->on('Connect', 'onConnect'); 
$server->on('Receive', 'onReceive'); 
$server->on('Close', 'onClose'); 
$server->start(); 

function onStart($server) {
    echo "Swoole server is running...
";
}

function onConnect($server, $fd) {
    echo "Client connection, client fd=$fd
";
}

function onReceive($server, $fd, $from_id, $data) {
    echo "Client request, client fd=$fd, data=$data
";
    $server->send($fd, 'Hello, world!');
}

function onClose($server, $fd) {
    echo "Client disconnected, client fd=$fd
";
}

上記のコードはTCPプロトコルのSwooleサーバーを作成し、クライアントが接続に成功すると「クライアント接続」の情報が出力されます。クライアントがデータを送信すると、「クライアント要求」メッセージが出力され、「Hello, world!」メッセージが返されます。

1.3 Swoole サーバーを起動する

Swoole サーバーを作成した後、start() メソッドを通じてサーバーを起動し、クライアント要求のリッスンを開始する必要があります。

$server->start();

2. Swoole で一般的に使用されるコンポーネントとテクノロジー

2.1 コルーチン

Swoole では、コルーチンは、複雑さを回避しながら同時実行パフォーマンスを効果的に向上できる軽量のスレッドです。マルチスレッド同期によって発生する問題。コルーチンの実装では、Swoole が提供するコルーチン コンポーネントを使用できます。これを使用すると、同時実行性の高いアプリケーションを迅速に構築できます。

次はコルーチンの例です:

Coun(function() {
    echo "Before coroutine
";
    Cosleep(1);
    echo "After coroutine
";
});

上記のコードは Coun() 関数を使用してコルーチンを作成します。最初の echo ステートメントとエコー ステートメントの間に 1 秒の遅延が発生します。 Cosleep() 関数。一時停止中、Swoole は他のタスクを処理するために他のコルーチンに切り替えます。

2.2 非同期ノンブロッキング IO

Swoole は、非同期ノンブロッキング IO のサポートを提供し、イベント駆動型の同時実行性の高いサーバーに使用できます。 Swoole では、PHP コードはブロックしませんが、コールバック関数を使用して非同期イベントを処理します。

以下は非同期ノンブロッキング IO の例です:

$fp = stream_socket_client("tcp://www.baidu.com:80", $errno, $errstr, 30); 
fwrite($fp, "GET / HTTP/1.0

"); 
swoole_event_add($fp, function ($fp) { 
    echo fread($fp, 8192); 
    swoole_event_del($fp); 
    fclose($fp); 
});

上記のコードは、stream_socket_client 関数を使用して TCP 接続を作成し、Baidu サーバーにリクエストを送信し、 swoole_event_add関数で非同期イベントに$fpを追加します。ループ内にコールバック関数を設定すると、イベント応答時にコールバック関数内のコードが実行されます。

2.3 アトミック操作

アトミック操作は、実行中に中断できない操作であり、競合状態やデッドロックの問題を解決するためにマルチスレッド プログラミングでよく使用されます。 Swoole は、マルチプロセス環境での安全な変数操作に使用できるアトミック操作のサポートも提供します。

次はアトミック操作の例です:

$atomic = new SwooleAtomic(0); 

SwooleProcess::signal(SIGUSR1, function($signo) use($atomic) {
    $atomic->add(1);
    echo "Increment atomic variable: " . $atomic->get() . "
";
});

while (true) {
    sleep(1);
}

上記のコードは、SwooleAtomic クラスを使用してアトミック変数を作成します。SIGUSR1 シグナルが受信されると、コールバック関数が実行され、アトミック変数は 1 ずつインクリメントされます。動作により、アトミック変数が変更されたことが検出されると、「アトミック変数をインクリメントします」メッセージが出力されます。

3. 概要

この記事では、PHP と Swoole を統合して同時実行性の高いサーバー開発を実現する方法を紹介し、Swoole で一般的に使用されるいくつかのコンポーネントとテクノロジについて説明します。 Swoole は、高性能のイベント駆動型サーバー アプリケーションを構築する必要がある開発者にとっては良い選択肢です。この記事を通じて、読者が Swoole の基本的な使い方を理解し、実際のニーズに応じた開発と最適化を実行できることを願っています。

以上がPHPとSwooleの統合により高同時サーバー開発を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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