swoole チュートリアル始めてから挫折するまでの理由を紹介
おすすめ (無料): swoole チュートリアル
1. swoole ソース パッケージのインストール
- swoole ソース コードをダウンロードします:
git clone https://gitee.com/swoole/swoole.git
-
phpize 経由 (php 拡張モジュールの拡張、php プラグイン モジュールの作成):
cd swoole
- 実行:
your /phpize/path
./configure --with-php-config=your/php/path/bin/php-config
- ## make && make install
- swoole.so の場所が表示されます
- 私の場所は次のとおりです:
- /opt/soft/php/lib/php/extensions/no-debug-non-zts-20170718/
#php.ini の設定 - /opt/soft/php/lib/php/extensions/no-debug-non-zts-20170718/
-
Add
- extension=swoole.so
php -m - コマンドを通じて、php 拡張モジュールを確認できます
-
- cd your/swoole/path/examples/server
- (プロセスがブロックされた場合は成功を意味します)
- (swoole によって開かれたポート番号を表示します)
swoole を学ぶには、ドキュメントを読む必要があります。 swoole ドキュメント
1. swoole
tcp サーバー (tcp_server.php)
//创建Server对象,监听 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); $serv->set([ 'worker_num' => 4, // worker进程数,cpu 1-4倍 'max_request' => 100, ]); /** * 监听连接进入事件 * $fd 客户端连接服务端的唯一标识 * $reactor_id 线程id */ $serv->on('connect', function ($serv, $fd, $reactor_id) { echo "Client: {$fd} - {$reactor_id} - Connect.\n"; }); //监听数据接收事件 $serv->on('receive', function ($serv, $fd, $reactor_id, $data) { $serv->send($fd, "Server: ".$data); }); //监听连接关闭事件 $serv->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); //启动服务器 $serv->start();
tcp クライアント (tcp_client.php)
// 创建tcp客户端 $client = new swoole_client(SWOOLE_SOCK_TCP); // 连接tcp服务端 if (!$client->connect("127.0.0.1", 9501)) { echo '连接失败'; exit; } // php cli fwrite(STDOUT, '请输入:'); $msg = trim(fgets(STDIN)); // 发送消息给tcp服务端 if (!$client->send($msg)) { echo '发送消息失败'; exit; } // 接收 $result = $client->recv(); echo $result;## を介して最も単純な TCP サービスを作成します。 #2. 拡張: php 匿名関数の 4 つのコールバック
$server->on('Request', function ($req, $resp) { echo "hello world"; });
class A { static function test($req, $resp) { echo "hello world"; } } $server->on('Request', 'A::Test'); $server->on('Request', array('A', 'Test'));
#関数
-
function my_onRequest($req, $resp) { echo "hello world"; } $server->on('Request', 'my_onRequest');
#オブジェクト メソッド
- #
class A { function test($req, $resp) { echo "hello world"; } } $object = new A(); $server->on('Request', array($object, 'test'));
3. UDP サーバーとクライアント ドキュメントに従って自分で作成することもできます
4. http サービス// 监听所有地址和9501端口 $http = new swoole_http_server('0.0.0.0', 9501); // 动静分离配置 $http->set([ // 开启静态请求 'enable_static_handler' => true, // 静态资源目录 'document_root' => '/opt/app/code1/', ]); $http->on('request', function ($request, $response) { // 获取get请求的参数 $param = json_encode($request->get); // 设置cookie $response->cookie('name', 'ronaldo', time() + 1800); // 输出到页面 $response->end("<h1 id="Hello-Swoole-param">Hello Swoole - {$param}</h1>"); }); // 开启http服务 $http->start();5. swoole
websocket サーバー (websocket_server.php)
// 监听所有地址和9502端口 $server = new swoole_websocket_server('0.0.0.0', 9502); // 动静分离配置 $server->set([ // 开启静态请求 'enable_static_handler' => true, // 静态资源目录 'document_root' => '/opt/app/swoole/websocket', ]); $server->on('open', function ($server, $request) { echo "server:handshake success with fd - {$request->fd}\n"; }); $server->on('message', function ($server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($server, $fd) { echo "client - {$fd} - close\n"; }); $server->start();
を通じて WebSocket サービスを作成しますwebsocket クライアント (websockt_client.html)
// 创建websocket实例
var websocketURL = "ws://www.rona1do.top:9502";
var websocket = new WebSocket(websocketURL);
// 实例化对象的onopen属性
websocket.onopen = function (ev) {
websocket.send("hello-websocket");
console.log("connect-swoole-success");
}
// 实例化对象的onmessage属性,接收服务端返回的数据
websocket.onmessage = function (ev) {
console.log("websockect-server-return-data:" + ev.data);
}
// close
websocket.onclose = function (ev) {
console.log("close");
}
6. オブジェクト指向を使用して Websocket サービス コードを最適化する
class WebSocket { const HOST = '0.0.0.0'; const PORT = 9502; private $ws = null; function __construct() { $this->ws = new swoole_websocket_server(self::HOST, self::PORT); $this->ws->on('open', [$this, 'onOpen']); $this->ws->on('message', [$this, 'onMessage']); $this->ws->on('close', [$this, 'onClose']); $this->ws->start(); } // 监听websocket连接事件 function onOpen($server, $request) { echo "server: handshake success with fd{$request->fd}\n"; } // 监听websocket消息接收事件 function onMessage($server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "this is server"); } // 监听客户端关闭事件 function onClose($server, $fd) { echo "Client:{$fd} closes\n"; } }7. スウールでのタスク 小規模なケース
onTask:
は task_worker プロセス内で呼び出されます。ワーカー プロセスは、swoole_server_task 関数を使用して、新しいタスクを task_worker プロセスに配信できます。現在の Task プロセスが onTask コールバック関数を呼び出すと、プロセスのステータスがビジーに切り替わり、新しいタスクを受信しなくなります。onTask 関数が戻ると、プロセスのステータスがアイドルに切り替わり、新しいタスクの受信を継続します。
onFinish: ワーカー プロセスによって配信されたタスクが task_worker で完了すると、タスク プロセスは swoole_server->finish() メソッドを通じてタスクの処理結果をワーカー プロセスに送信します。 。 rree
以上がなぜスウールは始めてから諦めてしまったのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、バグの報告、機能の送信、コーディング、ドキュメントの改善など、スウールプロジェクトに貢献する方法の概要を説明しています。それは、初心者が貢献を開始するために必要なスキルとステップについて議論し、プレスを見つける方法は

記事では、スウールをカスタムモジュールで拡張し、手順を詳細に、ベストプラクティスを詳細にし、トラブルシューティングで説明します。主な焦点は、機能と統合を強化することです。

この記事では、高性能アプリケーション用のPHPでSwooleの非同期I/O機能を使用することについて説明します。インストール、サーバーのセットアップ、および最適化戦略をカバーします。ワードカウント:159

記事では、Swooleのプロセス分離の構成、安定性とセキュリティの改善などの利点、トラブルシューティング方法について説明します。

Swooleの原子炉モデルは、イベント駆動型の非ブロッキングI/Oアーキテクチャを使用して、高電流シナリオを効率的に管理し、さまざまなテクニックを通じてパフォーマンスを最適化します。(159文字)

記事では、PHPフレームワークであるSwooleの接続問題のトラブルシューティング、原因、監視、および予防について説明します。

この記事では、Swooleのパフォーマンスを監視および最適化するためのツールとベストプラクティス、およびパフォーマンスの問題の方法のトラブルシューティングについて説明します。

要約:この記事では、不適切なリソース管理や管理されていないコルーチンなどの一般的な原因を強調し、識別、分離、修正を通じて、スウールアプリケーションのメモリリークの解決について説明します。 Swoole TrackerやValgrindなどのツール


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

WebStorm Mac版
便利なJavaScript開発ツール

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

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