ホームページ >バックエンド開発 >PHPチュートリアル >PHP 初心者ガイド: 非同期プログラミング

PHP 初心者ガイド: 非同期プログラミング

王林
王林オリジナル
2023-05-20 09:51:051087ブラウズ

PHP は、人気のあるスクリプト言語として、常に Web 開発の主流言語の 1 つです。 Web 開発では、Web クローラー、リアルタイム チャット、ロング ポーリングなどの高パフォーマンスのシナリオで非同期プログラミングがますます使用されています。この記事では、読者が非同期プログラミングの基本を習得し、Web アプリケーションのパフォーマンスを向上できるように、PHP 非同期プログラミングの関連知識を紹介します。

1. 非同期プログラミングの概要

非同期プログラミングとは、時間のかかる I/O 操作を呼び出すときに、プログラムが操作の完了を待つ必要はなく、操作を実行することを意味します。操作の完了後、対応するコールバック関数。同期プログラミングと比較して、非同期プログラミングは応答速度と同時実行機能が優れており、I/O 待機時間を有効に活用できます。

2. PHP 非同期プログラミングの実装方法

PHP 非同期プログラミングの主な実装方法は、マルチプロセスとイベント駆動の 2 つです。

1. マルチプロセス

マルチプロセスの実装は、プログラム内に複数のプロセスを作成し、各プロセスが別々のタスクを実行することです。 Unix/Linux システムでは、fork() システム コールを通じて新しいプロセスを作成できます。また、PCNTL 拡張パッケージには、プロセスの作成、終了、同期などを実現できる子プロセスを制御するための関数ライブラリが数多く用意されています。

マルチプロセスプログラミングは簡単ではありますが、プロセス間通信や子プロセスの異常終了など、課題も多くあります。また、多数の子プロセスを作成すると、複数のプロセスがシステムリソースを大量に消費するため、システム負荷が高くなります。

2. イベント駆動型

イベント駆動型は、PHP における非同期プログラミングの主流の実装です。このモードでは、プログラムは継続的にイベントをリッスンし、カスタム イベントがトリガーされたときにのみ対応するコールバック関数を実行します。イベント駆動型モデルでは、複数の接続が 1 つのスレッドとプロセスを共有できるため、システム リソースをより有効に活用できます。

一般的に使用される PHP イベント駆動モデルには、Reactor モデルとコルーチン モデルが含まれます。 Reactor モデルは、イベント ループ メカニズムに基づいた非同期プログラミング モデルです。 React では、I/O イベントのポーリングにイベント ループが使用され、イベントがトリガーされると、対応するコールバック関数が呼び出されます。コルーチン モデルは、コルーチン関数の開始と終了を制御することにより、非同期プログラミングの目的を達成します。

現在、PHP 非同期プログラミングで一般的に使用されている拡張機能は次のとおりです。

  • Swoole: Swoole は、イベント ループとコルーチンに基づいた高性能ネットワーク通信フレームワークであり、非同期を簡単に実装できます。 TCP/UDP/WebSocket サービス。
  • Workerman: Workerman は、WebSocket および TCP/UDP 通信をサポートする完全に非同期のノンブロッキング PHP フレームワークです。

3. PHP 非同期プログラミングの例

以下では、簡単な例を使用して PHP 非同期プログラミングの使用法を紹介します。

この例では、Swoole 拡張機能を使用して単純な TCP サービスを実装します。 TCP サービスをオンにすると、クライアントは Telnet ツールを通じてサーバーに接続し、サーバーにメッセージを送信できるようになります。メッセージを受信した後、サーバーはメッセージをクライアントに送り返します。

以下は関連するコード例です:

<?php
$server = new swoole_server('127.0.0.1', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
$server->set([
    'worker_num' => 4,
    'daemonize'  => false,
]);
$server->on('connect', function ($server, $fd) {
    echo "Client {$fd}: Connect.
";
});
$server->on('receive', function ($server, $fd, $from_id, $data) {
    $server->send($fd, 'Receive: ' . $data);
});
$server->on('close', function ($server, $fd) {
    echo "Client {$fd}: Close.
";
});
echo "Server Start.
";
$server->start();

上記のコードでは、まず新しい swoole_server 関数を通じて Swoole サービスを作成し、IP アドレス 127.0 を持つ 4 つのワーカー プロセスをセットアップしました。 0.1 、ポート番号は 9501 です。次に、クライアントの接続、受信、終了イベントにそれぞれ対応する 3 つのコールバック関数を登録しました。クライアントが接続すると、Connect メッセージが出力され、クライアントがデータを送信すると、そのデータがクライアントに返送され、クライアントが接続を閉じると、Close メッセージが出力されます。最後に、Server Start メッセージを出力してサービスを開始します。

4. 概要

非同期プログラミングは、PHP Web 開発における重要なスキルであり、Web アプリケーションのパフォーマンスと同時実行性を向上させることができます。この記事では、PHP 非同期プログラミングの概念と実装を紹介し、簡単な使用例を示します。この記事を学習することで、読者が非同期プログラミングの使用方法を学び、Web 開発能力を向上できることを願っています。

以上がPHP 初心者ガイド: 非同期プログラミングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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