インターネットの継続的な発展と普及に伴い、ネットワーク プログラミング技術は多くのプログラマーにとって必要なスキルの 1 つになりました。この分野では、Swoole は非常に優れたネットワーク通信フレームワークです。 Swoole は、非同期 IO、マルチプロセス、コルーチンなどの強力なネットワーク プログラミング機能を提供する PHP の拡張モジュールで、高い同時実行性や高性能などの問題をうまく解決できます。この記事では、Swoole のネットワーク プログラミングの基本的な入門ガイドを紹介します。
1. Swoole のインストールと設定
Swoole のインストールには、PHP バージョン 7.0 以降が必要で、phpize と php-config がインストールされている必要があります。次のコマンドでインストールできます。
$ git clone https://github.com/swoole/swoole-src.git $ cd swoole-src $ phpize $ ./configure $ make && make install
インストールが完了したら、php.ini に次の設定を追加します:
extension=swoole.so
2. Swoole の基本的な使い方
1. TCP サーバーを作成します
Swoole は次のコードで作成できます TCP サーバーはローカル マシンの 9501 ポートをリッスンします:
$server = new SwooleServer("0.0.0.0", 9501);
2. イベントの監視
サーバーはクライアントの接続を監視する必要があります、データの受信、接続の終了、その他のイベント。次のコードでリッスンできます。
$server->on('connect', function ($serv, $fd) { echo "Client: connect. "; }); $server->on('receive', function ($serv, $fd, $from_id, $data) { $serv->send($fd, "Server: ".$data); }); $server->on('close', function ($serv, $fd) { echo "Client: close. "; });
上記のコードでは、on メソッドを使用してイベント名とコールバック関数をバインドします。
3. サーバーを起動します
イベント監視が完了したら、次のコードを実行してサーバーを起動する必要があります:
$server->start();
この時点で、TCP サーバーは正常に作成されました。 Telnet などのツールを使用してテストできます。
3. UDP サーバーの作成
Swoole は UDP サーバーを作成することもでき、その使用方法は TCP サーバーの場合と似ています。以下は、UDP サーバーを作成するためのサンプル コードです。
$server = new SwooleServer("0.0.0.0", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); $server->on('Packet', function ($server, $data, $clientInfo) { $server->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data); }); $server->start();
上記のコードでは、ローカル マシンの 9502 ポートをリッスンするための UDP サーバーが作成されます。データがサーバーに送信されると、Packet イベントがトリガーされ、データがクライアントに送り返されます。
4. WebSocket サーバーの作成
Swoole では WebSocket サーバーを作成することもできます WebSocket は、TCP プロトコルに基づく全二重通信プロトコルです。以下は、WebSocket サーバーを作成するためのサンプル コードです。
$server = new SwooleWebSocketServer("0.0.0.0", 9503); $server->on('open', function (SwooleWebSocketServer $server, $request) { echo "server: handshake success with fd{$request->fd} "; }); $server->on('message', function (SwooleWebSocketServer $server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish} "; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed "; }); $server->start();
上記のコードでは、WebSocket サーバーが作成され、ローカル マシンのポート 9503 をリッスンします。クライアントが接続すると、open イベントがトリガーされます。クライアントがメッセージを送信すると、メッセージ イベントがトリガーされ、メッセージはそのままクライアントに送り返されます。クライアントが接続を閉じると、close イベントがトリガーされます。
3. Swoole の高度な使い方
1. Task 非同期タスクを使用する
Swoole が提供する Task 関数は、時間のかかるビジネス ロジックをブロックすることなく非同期で処理できます。メインプロセスの。以下はタスクのサンプル コードです。
$server = new SwooleServer("0.0.0.0", 9501); $server->on('receive', function ($serv, $fd, $from_id, $data) { $task_id = $serv->task($data); //投递异步任务 echo "Dispath AsyncTask: id=$task_id "; }); $server->on('task', function ($serv, $task_id, $from_id, $data) { echo "New AsyncTask[id=$task_id]".PHP_EOL; // 处理异步任务 $serv->finish("$data -> OK"); }); $server->on('finish', function ($serv, $task_id, $data) { echo "AsyncTask[$task_id] Finish: $data".PHP_EOL; }); $server->start();
上記のサンプル コードでは、クライアントがサーバーにデータを送信すると、タスクはタスク キューに配信され、非同期タスクは onTask で処理されます。イベント。 Taskの処理が完了すると、onFinishイベントが呼び出され、処理結果がクライアントに返されます。
2. コルーチンの使用
コルーチンは、Swoole が提供する同時プログラミング手法であり、1 つのスレッドで数千万レベルの同時処理を実現できます。以下はコルーチンを使用するサンプル コードです。
Coun(function () { $client = new SwooleCoroutineClient(SWOOLE_SOCK_TCP); if (!$client->connect('127.0.0.1', 9501, 0.5)) { echo "connect failed. Error: {$client->errCode} "; } $client->send("hello swoole"); $res = $client->recv(); echo $res; $client->close(); });
上記のサンプル コードでは、Coun を使用してコルーチン タスクを作成し、SwooleCoroutineClient を使用して TCP クライアントを作成し、connect メソッドを使用して接続します。接続が正常に確立されたら、send メソッドを使用してメッセージを送信し、recv メソッドを使用して戻り結果を受け取ります。最後に、close メソッドを使用して接続を閉じます。
4. まとめ
この記事では、Swoole ネットワーク プログラミング フレームワークの基本的な使い方を紹介し、TCP サーバー、UDP サーバー、WebSocket サーバー、タスク非同期タスク、コルーチンなどの機能を説明します。サンプルコードを通して使い方を説明します。 Swoole は柔軟性と高いパフォーマンスを備えており、さまざまなシーンで優れた結果を達成できます。ただし、開発者は、特定の基礎知識と的を絞ったプログラミング的思考を持っていることも求められます。この記事の紹介を通じて、読者の皆様は Swoole について予備的な理解と応用ができると思います。
以上がSwoole ネットワークプログラミングの基礎 初心者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。