Swoole は、インターネット、モバイル通信、エンタープライズ ソフトウェア、クラウド コンピューティング、オンライン ゲーム、モノのインターネット (IOT)、車両のインターネット、スマート ホームなどの分野で広く使用できます。 PHP + Swoole をネットワーク通信フレームワークとして使用すると、企業の IT 研究開発チームの効率が大幅に向上し、革新的な製品の開発にさらに集中できます。最近、PHP の非同期、並列、高性能ネットワーク通信エンジン Swoole のバージョン 1.10.0 がリリースされました。このバージョンでは、いくつかの新機能が追加されています。以下で言うことはあまりありません。詳細な紹介を見てみましょう。皆さんのお役に立てれば幸いです。
自動 DNS 解決
非同期クライアントの新しいバージョンでは、ドメイン名を解決するために swoole_async_dns_lookup を使用する必要がなくなり、最下層は自動ドメイン名解決を実装します。クライアントは、connect メソッドの実行時にドメイン名を直接渡すことができます。
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC); $client->on("connect", function(swoole_client $cli) { $cli->send("GET / HTTP/1.1\r\n\r\n"); }); $client->on("receive", function(swoole_client $cli, $data){ echo "Receive: $data"; $cli->send(str_repeat('A', 100)."\n"); sleep(1); }); $client->on("error", function(swoole_client $cli){ echo "error\n"; }); $client->on("close", function(swoole_client $cli){ echo "Connection close\n"; }); //底层会自动进行异步域名解析 $client->connect('www.baidu.com', 9501);
スローリクエストログ
新バージョンでは、スローリクエストのPHP関数コールスタックを記録できるスローリクエスト追跡機能が追加されました。
function test() { test_sleep(); } function test_sleep() { echo "sleep 5\n"; sleep(5); } $server = new swoole_server('127.0.0.1', 9501); $server->set([ 'worker_num' => 1, 'task_worker_num' => 1, 'trace_event_worker' => true, 'request_slowlog_timeout' => 1, 'request_slowlog_file' => '/tmp/trace.log', ]); $server->on('Receive', function($serv, $fd, $reactor_id, $data) { test(); $serv->send($fd, "Swoole: $data"); }); $server->start();
遅いリクエストを処理した後、/tmp/trace.log ログにエラー メッセージの行が出力されます:
[08-Jan-2018 15:21:57] [worker#0] pid 26905 [0x00007f60cda22340] sleep() /home/htf/workspace/swoole/examples/server/trace.php:10 [0x00007f60cda222e0] test_sleep() /home/htf/workspace/swoole/examples/server/trace.php:4 [0x00007f60cda22280] test() /home/htf/workspace/swoole/examples/server/trace.php:28 [0x00007f60cda22190] {closure}() /home/htf/workspace/swoole/examples/server/trace.php:42 [0x00007f60cda22140] start() /home/htf/workspace/swoole/examples/server/trace.php:42
新しい STREAM モジュール
新しいストリーム モジュールは、Reactor、Worker、および Task プロセス間の通信を行います。より便利 柔軟で最大限のデカップリング。複雑なオンライン プロジェクトでは、ストリーム モードを使用して、リクエストの割り当てとスケジュールをより効率的にします。
$serv = new swoole_server("127.0.0.1", 9501); $serv->set(array( 'dispatch_mode' => 7, 'worker_num' => 2, )); $serv->on('receive', function (swoole_server $serv, $fd, $threadId, $data) { var_dump($data); echo "#{$serv->worker_id}>> received length=" . strlen($data) . "\n"; }); $serv->start();
ReactorとWorkerの通信、dispatch_mode = 7を使用して
WorkerとTask間の通信を有効にします、task_ipc_mode = 4を使用して有効にします
Event::cycle関数を追加
ユーザーコードをカスタマイズできますEventLoop フック関数。イベント ループの各ラウンドの最後に呼び出されます。独自のスケジューラを実装するには、Generator + Yield または Promise のような Swoole フレームワークを使用すると便利です。
Swoole\Timer::tick(2000, function ($id) { var_dump($id); }); Swoole\Event::cycle(function () { echo "hello [1]\n"; Swoole\Event::cycle(function () { echo "hello [2]\n"; Swoole\Event::cycle(null); }); });
その他の更新
符号付き整数をサポートするために Table::incr と Table::decr を更新
PHP-7.2 バージョンと互換性があります
Event::del 関数が標準入力を削除できないことを修正ハンドルの問題
タスクプロセスのタイマー間隔がクライアント受信タイムアウトより小さく、Client::recvでデッドロックが発生する問題を修正
SSL/HTTP通信の正当性を検証するためのssl_host_name設定項目を追加TLS ホスト
dispatch_mode = 3 を使用すると、すべてのワーカーがビジー状態になるとエラー ログが出力されます
リスニング ポートのすべての接続を横断できるポート イテレータを追加します
テーブルのメモリを修正します非 x86 プラットフォームでのアライメントの問題
BASE モードでの無効な max_request 構成の問題を修正
一部のクライアント ping フレームにマスク データが含まれている場合に、WebSocket サーバーがパケット エラーを返す問題を修正
コンテンツに応答する HEAD メソッド Content-Length を運ぶとスタック問題が発生する
JSON 形式に対する MySQL 非同期クライアントのサポートを増やす
関連する推奨事項:
Swoole と WebSocket のシンプルなチャット ルームの実装方法
php Swoole をリアルタイムで使用してクライアント データを更新します
Swoole を使用して Web ページを非同期的にキャプチャし、実際に共有します
以上がSwoole新バージョン1.10.0の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。