検索
ホームページPHPフレームワークSwooleSwoole ネットワークプログラミングの基礎 初心者ガイド

Swoole ネットワークプログラミングの基礎 初心者ガイド

Jun 13, 2023 am 11:56 AM
ネットワークプログラミングスタートガイドswoole

インターネットの継続的な発展と普及に伴い、ネットワーク プログラミング技術は多くのプログラマーにとって必要なスキルの 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 サイトの他の関連記事を参照してください。

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

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。