検索
ホームページバックエンド開発PHPチュートリアルLaravel 4.2でのキューサービス(キュー)の使用経験、laravelqueue_PHPチュートリアル

Laravel 4.2、laravelqueueのキューサービス(queue)の利用体験

この半月、laravel 4.2とlaravelが誇るキューサービス(queue)を初めて使用して、WeChatパブリックアカウントのバックエンドシステムの書き換えに参加しました。

システム全体で複数端末のやり取りや多数の音声送信・処理サービスが行われているため、一部の箇所で応答時間が長すぎることが判明しました。以前のシステムは、node.js と mongoDB に基づいていました。node は本質的に非同期であり、デーモン プロセスを備えているため、この問題は発生しませんでしたが、この書き換えにより、必然的に非同期プロセスが導入されます。行列が目に入る。

「中国語ドキュメント」のこのページによると、ほとんどすべて英語ですが、laravel はバージョン 4.2 でキューストレージとして redis を導入したばかりで、これは非常に良いニュースです。 OK、背景の紹介はこれで終わりです。以下、乾いた内容について話しましょう。

laravel のキュー サービスは他のキュー サービスと何ら変わりません。これらは人間の思考に最も沿った最も単純で一般的なプロセスです。キュー情報を保存する場所があり、PHP プロセスが実行時にタスクを書き込みます。デーモン プロセスはキュー情報をポーリングし、実行要件を満たすタスクを実行および削除します。 PHP は URL 駆動の同期言語であり、本質的にブロックするため、Laravel がキュー情報をクエリして実行するためのデーモン ツールを提供することは驚くことではありません。

Laravel のキュー設定ファイルは /app/config/queue.php です。 Default Queue Driver 項目では、「sync」、「beanstalkd」、「sqs」、「iron」、「redis」の 5 つのドライバーを選択できます。

1. sync はローカル デバッグ用の同期ドライバーです

2. Beanstalkd はプロフェッショナルなキュー サービス ドライバーです: http://kr.github.io/beanstalkd/

3. sqsとironは海外のサードパーティキューサービスです

4. 最後の項目 redis は、すべてのキャッシュ サービスとセッション サービスを redis に移行できるように、redis を使用する理由を示します。

0. ちなみに、1S の処理時間は夢ではありません。1S 兄弟。

キュー内のタスクは実行時に PHP デーモンによって独立して呼び出されるため、キュー サービスは独立したクラスとして新しいタスク クラスを作成する必要があります。を呼び出す前に他のクラスを使用すれば間違いありません。以前は、入力情報検証バリデーターや特別なセキュリティ検証モジュールなど、多くの追加サービスを別のフォルダー /app/services に分離しました。今回は、キュー クラスがその中に配置されます。

キューの使用は非常に簡単です。簡単な例を次に示します。

コードをコピーします コードは次のとおりです:
キューを使用します;
Queue::push('CurlJsonQueue', [
'url' => $url,
'json' => $json
]);

これは標準的なキュープッシュプロセスです。もちろん、ここでは CurlJsonQueue クラスをサービスのルート ディレクトリに配置します。このディレクトリは、composer.json の「autoload」の「classmap」に登録されており、トップレベルの名前空間に配置されており、直接呼び出すことができます。必要に応じて、AppOOXX をトップレベル以外の名前空間に記述することができます。私たちのシステムは WeChat サーバーとの多くの対話を必要とするため、このクラスを独立して作成しました。

コードをコピーします コードは次のとおりです:
クラス CurlJsonQueue は BaseController を拡張します{

パブリック関数 fire($job, $data)

{
$url = $data['url'];
$json = $data['json'];

parent::base_post_curl($url, $json);

$job->delete();

}
}

このクラスのデフォルトのメソッドはfire()で、パラメータも$jobと$dataの2つで固定されているのでBaseControllerにpostcurlモジュールをカプセル化して呼び出しました。さらに、ここには小さな落とし穴があります。base_post_curl() を書いたときに protected を使用したため、BaseController の使用が無効になり、継承する必要がありました。

上記のコードを実行すると、新しいタスクがキューに配置され、laravelは次のコマンドを通じてデーモンプロセスを開始します:

コードをコピーします コードは次のとおりです:
php 職人キュー:聞いてください

その後、デーモンがキューの処理を開始します。このコード内のPHPコマンドとartisanファイルのパスはご自身で調整してください。

使用するキュー システムは Redis と PHP コマンド ラインを使用していることに気づいたかもしれませんが、テスト環境ではブートを追加したり、手動で起動したりすることもできますが、運用環境ではより安定したシステムが必要です。これを保護するツールとしては、スーパーバイザを使用します。スーパーバイザのインス​​トールと構成については、http://blog.segmentfault.com/qianfeng/1190000000532561 を参照してください。記事をご確認ください。 。 。

OK、すべての設定が完了したら、redis と PHP コマンド ラインを実行すると、システム全体が問題なく動作し始めます~

使用経験:

キュー サービスは非常に使いやすく、以前はアプリとの対話プロセスに 6 ~ 7 秒かかっていましたが、これは基本的に時間のかかる PHP コードの実行時間であり、2 秒未満に短縮されました。操作は非同期になっています。ただし、キュー サービスのデフォルトは 1S で、Alibaba Cloud サーバー上で実行できるサービスがあるかどうかを確認するプロセスを開くため、消費量はわずかに大きくなります。また、以前の同期中にファイルをロードする利点がないため、キューの処理時間は比較的長くなります。ただし、複数のタスクがある場合、PHP プロセスは 1 秒ごとに実行されるのではなく、継続的に実行されます。

落とし穴について話しましょう:

1. キューコアクラスは特殊な関数を使用しているため、明確な型を持たない変数は単一要素の配列の形式で json に格納され、その後 redis に格納されます。解決策は、入力する各データの前に「」を追加することです。上記の $url と $json はすでに引用符で囲まれて型宣言されているため、この手順は実行されませんでした。

2. URL をキューに渡す場合、システム キュー クラスは各 / の前に 2 つの \ を追加します。これは、一部の特殊な操作に致命的な影響を与える可能性があります。 (冗談ですが、上記と同じくらい致命的ですか!)

C#のキュー キュー内の値が繰り返されない場合

Contains(確認したい内容)を利用して判定(戻り値Boolean型)します。例: namespace TestBed
{ public class MainTest
{ public static void Main()
{
int[]数値 = { 1,1,2,3,4,2,5,6,7};
Queue();
foreach (数値の var item)
{
if (!q.Contains(item))
{
q.Enqueue(item);
}
}
} }
}

なぜデータ構造ではキュー q->rear=(q->rear+1)%queuesize が q->rear=(q->rear+1) ではないのでしょうか?も可能です

最初の式はキューのポインタを制御してキューサイズの範囲内でループ内をジャンプしますが、2 番目の式ポインタは 1 つのノードのメモリ距離だけ後方にジャンプし続けます。定義されたキューサイズの有効なメモリ範囲が未割り当てのメモリを占有している場合、コンパイラはエラーを報告します。 ? ?

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/903478.html技術記事 Laravel 4.2のキューサービス(queue)の利用体験、laravelqueue この半月、初めてlaravel 4.2を使ってWeChatパブリックアカウントのバックエンドシステムの書き換えに参加し、laravel...

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?May 03, 2025 am 12:21 AM

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

セッションがサーバーで機能していない場合、どのような措置を講じますか?セッションがサーバーで機能していない場合、どのような措置を講じますか?May 03, 2025 am 12:19 AM

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()関数の重要性は何ですか?session_start()関数の重要性は何ですか?May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

セッションクッキーにHTTPonlyフラグを設定することの重要性は何ですか?セッションクッキーにHTTPonlyフラグを設定することの重要性は何ですか?May 03, 2025 am 12:10 AM

HTTPonlyフラグを設定することは、XSS攻撃を効果的に防止し、ユーザーセッション情報を保護することができるため、セッションCookieにとって重要です。具体的には、1)HTTPONLYフラグは、JavaScriptがCookieにアクセスするのを防ぎます。2)Flagは、PHPとFlaskのSetCookiesとMake_Responseを介して設定できます。

PHPセッションはWeb開発でどのような問題を解決しますか?PHPセッションはWeb開発でどのような問題を解決しますか?May 03, 2025 am 12:02 AM

phpsessionssolvetheprobrof of maintainsea crossmultiplehttprequestsbyStoringdataontaonsociatingitiTauniquesessionid.1)それらは、通常はヨーロッパの側面、および一般的には、測定されている

どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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

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

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境