ホームページ  >  記事  >  PHPフレームワーク  >  Laravelでswooleを使う方法

Laravelでswooleを使う方法

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-12-12 10:28:136285ブラウズ

Laravelでswooleを使う方法

PHP の非同期、並列、高性能ネットワーク通信エンジンは純粋な C 言語で書かれており、PHP 言語の非同期マルチスレッド サーバー、非同期 TCP/UDP ネットワーク クライアント、および非同期MySQL 、非同期 Redis、データベース接続プール、AsyncTask、メッセージ キュー、ミリ秒タイマー、非同期ファイルの読み取りと書き込み、非同期 DNS クエリ。 Swoole には Http/WebSocket サーバー/クライアントと Http2.0 サーバーが組み込まれています。

Swoole の公式 Web サイトのドキュメントが十分に充実していないのが頭の痛い問題ですが、ほとんどの問題は説明されています。 Swoole に興味がある場合は、この Swoole 入門チュートリアルをご覧ください。 Swoole は、マルチスレッドや長い接続など、PHP を新しいレベルに引き上げる多くの素晴らしい機能を提供します。詳細については、入門チュートリアルを参照してください。この記事では、Laravel と Swoole の組み合わせについてのみ説明します。

サービスを提供するには、Swoole は CLI モードで実行する必要があります。CLI モードとは何ですか? Swoole ビジネス コードがserver.php というファイルに記述されている場合は、コマンド ラインに php server.php と入力してファイルを開きます。これは頭​​の痛い問題です。Laravel フレームワークはこのようには機能しないため、どのようにして Laravel と組み合わせることができるのでしょうか?そうです、アーティザン コマンドをカスタマイズするのはとても簡単です。

ステップ 1-コマンドのカスタマイズ

Artisan Commnad のカスタマイズについて、知っておく必要がある技術的なポイントはすべてここにあります。SwooleCommand というコマンドをカスタマイズしました。キーを直接貼り付けます。コード:

Laravelでswooleを使う方法

fire is the入口

コマンドライン(CLI)でphpArtisan swoole startを実行し、Swooleサービスを開始します。コードを分析すると、コマンド パラメーターには起動、再起動、およびシャットダウンが含まれていることがわかります。手間を省くために起動部分のみを実装しました。シャットダウンする必要がある場合は、Linux で kill コマンドを使用してプロセスをシャットダウンします。手順非常に簡単です:

1. ps -aux|grep 職人コマンドを実行して pid を取得します (複数のプロセスがあります。最初のプロセスを強制終了するだけです)

2. kill pid コマンドを実行します。 , pid は最初のステップで取得したものです

Swoole の構成はこの記事の範囲内ではありません。公式 Web サイトにアクセスしてください。Swoole サービスは、ここの $serv 変数に保存されています。 Laravel は、後で対話するためにコマンドを送信します。 Swoole のイベント応答コードが次のようなものであることがわかります。

Laravelでswooleを使う方法

イベント応答を処理するにはハンドラーを使用します

火が Swoole へのドアを開くと、ハンドラーここは Swoole と Laravel の間のベルトコンベアーであり、自分で作成したハンドラーを使用して、Laravel フレームワークにさまざまなビジネス ロジックを記述することができ、Laravel が提供するさまざまな効率的で便利な機能を使用することができます。 「ハンドラー」は命名規則です。「コールバック」、「マネージャー」、または「リスナー」と呼ぶこともできます。命名規則によって決まります。私は新しいメソッドを使用しませんでしたが、主にトラブルを避けるために Laravel の IoC を使用して App::make を挿入しました (ハンドラーのコンストラクターがカスタム データ処理クラスを使用するため、以下を参照)。

STEP 2-Custom handler

カスタムクラスなので名前空間に従ってcomposer.json内で宣言し、完了後composer dump-autoloadを実行してくださいコマンドを更新します。たとえば、ハンドラーを保存するフォルダー app\handlers を作成すると、composer.json では次のようになります。

Laravelでswooleを使う方法

autoload を小さくすることはできません

次に、ハンドラーで正確に何が行われるかを決定するのはあなた次第です。とにかく、これはコントローラーを書くのとほぼ同じです。Laravel フレームワークのすべての機能を自由に使用できます。私のものを貼り付けてください:

Laravelでswooleを使う方法

前のセクションで述べたように、構造上、IoC を使用します サーバーは独自のデータ処理クラスを使用します。追加、削除、変更、クエリ、およびその他のデータ処理サービスをリポジトリに配置します。他に理由はありませんが、この方法でコードがきれいに見えます。このようにして、Swooleを使用してデータを受信するプロセスは完了しましたが、Swooleを使用してクライアントにデータを送信したい場合はどうすればよいですか?そうですね、これは少し面倒で、曲線メソッドを実装する必要があります。次のセクションに進みます。

ステップ 3-データの送信

方法は 2 つありますが、どちらもキャッシュ KV 構造から分離できません (Laravel 独自のキャッシュ関数で十分です)。クライアントのアドレスを保存します。そうでない場合、データの送信先をどうやって知ることができるでしょうか。私は最初の 1 つを使用します。手間が省けます。Swoole はデータの送信とは何の関係もありません。長期間の WebSocket 接続が必要な場合は、これは当てはまりません。2 つ目のものだけを使用してください。もっと良い方法があれば教えてください!

最初のもの: fsockopen

これは非常に単純で、swoole とは何の関係もありません。Swoole の connection_info 関数を使用してクライアントの IP アドレスとポートを取得し、fsockopen を使用してデータを直接送信します。

2 番目のタイプ: 内部ポートのリスニング

Swoole は複数のポートの監視をサポートしています。実装のアイデアは、fsockopen を使用して内部リスニング ポートにデータを送信し、$serv を呼び出してメッセージを送信することです。この利点は、クライアントの実際の IP アドレスとポートを知る必要がなく、クライアントの $fd 識別子をキャッシュに保存し、データを直接送信できることです。このアイデアを使用して、iptables でポートを開くことを忘れないでください。私自身は長時間接続しないと面倒だと思ったので使いませんでした。

まとめ

Swoole は非常に優れていますが、実際にはあまり使用していません (プロジェクトに十分な資金が貯まるまで待つつもりです)。公式サイトの設定を参考にして、nginx ホスティングエージェントとして Swoole を使用することもでき、パフォーマンスが大幅に向上すると言われています。

PHP 中国語 Web サイトには、無料の Swoole 入門チュートリアル が多数あり、誰でも学習することができます。

以上がLaravelでswooleを使う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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