ホームページ  >  記事  >  バックエンド開発  >  Swoole新バージョン1.10.0の詳細説明

Swoole新バージョン1.10.0の詳細説明

小云云
小云云オリジナル
2018-01-11 11:30:102275ブラウズ

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 サイトの他の関連記事を参照してください。

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