この記事では、主に PHP を使用して注文の遅延処理を実装する方法に関する関連情報をサンプル コードを通じて詳しく紹介します。この記事は、学習や仕事に必要な学習に役立ちます。以下、一緒に学びましょう。
ビジネス要件
最近、ビジネスを行う際に、注文がタイムアウトして支払いが行われなかった場合に、顧客が注文した後に自動的にキャンセルする機能を実装する必要があります。いくつかの方法を確認しました:
クライアントはその時点でキャンセルをリクエストします
サーバーはキャンセルが必要な注文があるかどうかを定期的にチェックし、バッチで処理します
注文後にタイマーを設定し、処理を遅らせます
Redis または Memcache ストレージを使用し、有効期限を設定し、自動削除します
上記の方法を考慮すると、最初の方法が最初に削除されます。ネットワークに接続している場合、リクエストはサーバーに送信できず、注文は未処理の状態になります。2 番目の方法がよく使用されますが、精度の問題と、スケジュールされたタスクの期間を確認する必要があります。したがって、一時的にバックアップ方法としてリストされています。4 番目の方法の問題は、注文が削除されると物理的に削除され、未処理のデータがカウントされないことです (もちろん、mysql などのデータベースに長期間保存することもできます)。 Redis を保存するときに -term storage を使用し、通常の処理には方法 2 を使用します)。
ついに方法 3 を使用する準備が整いました。
方法3の使用を確認する場合、使用する開発言語PHPの関係で、タイマー機能を実装するにはSwooleまたはWorkermanを使用する必要があります。 Swoole は C で開発された拡張フレームワークなので、パフォーマンスの点で断然優れているため、Swoole を選択しました。
準備
Swooleを使用するには、まずサーバーにSwoole拡張機能をインストールする必要があります。インストール方法は、この記事を参照してください
インストール後、拡張機能が正常にインストールされている場合は、phpinfo または PHP-m を確認し、Swoole が表示されれば、インストールが成功したことを意味します
Swoole 公式ドキュメントにタイマー関連のドキュメントがあります
テストを開始します
swoole_test.php ファイルを作成し、 log.txt ファイル (テストを使用)、swoole_test.php コードは次のとおりです:
<?php swoole_timer_after(3000, function () { append_log(time()); echo "after 3000ms.\n"; }); function append_log($str) { $dir = 'log.txt'; $fh = fopen($dir, "a"); fwrite($fh, $str."\n"); fclose($fh); }
次に、Web ページでこの PHP ファイルにアクセスすると、結果は次のようになります:
次に、Linux ターミナルで PHP を実行します: / usr/local/php7/bin/php /home/app/swoole_test.php、結果は以下の通りです:
心がときめきました。 。 。
タイマーは cli モードでのみ使用できることが判明したため、このアイデアはおそらく GG になるでしょう。他に方法はありませんか?涙も出ずに泣きそうになったとき、突然思いつき、「パイソン!」という言葉が頭に浮かびました。
はい、PHP だけに頼ることはできません。Python のような魔法の言語もあります。Python の os モジュールの os.system メソッドはコマンドラインを実行できるため、cli モードで実装できることがわかっています。今 swoole_test.php ファイルを実行しましたか?
興奮した後、テストは実行可能だと思いました
Linux には Python が付属していることはわかっていますが、バージョンによって Python のバージョンが異なります。Python2.6 が付属しているものもありますが、これは低すぎるため、より高いバージョンをインストールする必要があります。バージョン、ここでは Python3 を選択します。システムに付属の Python2 を上書きしないように注意してください。おおよそのインストール手順は次のとおりです:
wget http://python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
tar xf Python-3.6.0。 tar .xz
cd Python-3.6.0
./configure --prefix=/usr/local/python3
make && make install
ln -s /usr/local/ python3 /bin/python3 /usr/bin/python3
次に、ターミナルに Python3 と入力します。
が表示されれば、インストールは成功です。
Python3 をインストールした後、次の内容で新しい test.py ファイルを作成します:
#!usr/bin/env python3` #-*- coding:utf-8 -*- import os ret = os.system("/usr/local/php7/bin/php /home/app/swoole_test.php") #请使用自己系统的绝对路径 print(ret)
それからターミナルで実行します: /usr/bin/python3 /home/app/test.py、注: これはPHP ファイルを実行するだけですが、ファイル内のエコー内容はターミナルに出力されません。このとき、新しく作成された log.txt ファイルが使用されます。 Pythonファイルを実行後、ログファイルを確認すると内容が書き込まれていたので、Pythonを使ってPHPのcliモードを実装することができます。 ┗|`O'|┛ わぁ~~
この時点で、Python を使用して PHP の cli モードを実装しましたが、Web 経由でリモートにアクセスするにはどうすればよいですか?このとき、PHP の exec メソッドが使用されます。PHP の exec メソッドは、Python の os.system メソッドと同じようにコマンド ライン コマンドを実行できることがわかっているので、次の内容の新しい test.php ファイルを作成します。 Web ページから test.php ファイルをダウンロードします。結果は以下の通りです:
然后去log文件检查,发现也写入日志了,所以这个方法是可行的!
做到这里心里美滋滋的,不过老觉得好像哪里不对,终于终于意识到一个很傻逼的问题:既然PHP可以直接有命令行函数,为啥多此一举借助Python然后在用Python的函数呢?这不是脱了裤子放屁多此一举吗?
再大骂自己是傻逼N遍之后,我默默修改了test.php文件内容:
<?php echo "begin<br>"; $program="/usr/local/php7/bin/php /home/app/nongyephp/swoole_test.php"; #注意使用绝对路径 (exec ($program)); echo "end<br>"; die;
在直接访问test.php文件,反馈结果和借助Python一样,这样就可以免去Python那一步,直接用PHP的exec函数来执行PHP文件。
结尾
测试通过后发现这种方法是可以创建定时器并且通过web远程使用的,不过有个问题,如果用和我上述一样用网页模拟会发现网页刷新是要等test.php执行完才会结束,也就是说如果我们把延时器的时间设成30分钟会要等待30分钟才会有反馈信息,这种方式肯定行不通的,所以需要使用异步访问,比如使用web的ajax技术和其他异步技术,这里不再赘述
尾巴
以上只是我想到解决问题的想法和实施步骤,到了真正开发可能不会选择这种方式,因为没有经过性能测试,而且对于进程控制和线程控制并没有多深入的了解,所以以后做订单自动取消还是会选择方法2的吧。
上述方法其实完全可以省掉Python那一步,我没有去掉的原因是把我的实现经历写出来,因为我觉得开发期间可能真的会遇到这种多此一举的方式,总之是要多思考,多看代码,找出能优化的方案,这里感觉自己差得很远,共勉吧
相关推荐:
以上がPHPにおける注文処理の遅延について詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

HTTPキャッシュヘッダーの主要なプレーヤーには、キャッシュコントロール、ETAG、およびラスト修飾が含まれます。 1.Cache-Controlは、キャッシュポリシーを制御するために使用されます。例:キャッシュコントロール:Max-Age = 3600、public。 2。ETAGは、一意の識別子を介してリソースの変更を検証します。例:ETAG: "686897696A7C876B7E"。 3. Last-Modifiedは、リソースの最後の変更時間を示しています。

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
