同じPHPスクリプトのインスタンスは相互通信できますか?
-
07-07-2019 - |
質問
すべてのページリクエストに対して、ウェブサーバー(Apacheなど)がメモリ内にスクリプトの新しいインスタンスを作成すると想定しています。これらのインスタンスは実行中に相互に通信できますか?データも渡しますか
解決
PHPのスクリプト間でデータを渡したい場合は、memcachedまたはデータベースを使用することをお勧めします。または場合によってはAPC。
スクリプトが同じセッションに属している場合、理論的にはセッションを介して通信できますが、セッションにアクセスできるスクリプトは一度に1つだけであるため、ほとんどの場合、これは事実上一方向の通信になります(session_start()はそのスクリプトが暗黙的または明示的にセッションを終了するまでセッション)。
他のヒント
マーティンとクレタスの提案は有効だと思います。私の選択は、スクリプトの最終目標の機能です。
- どのくらいの量のデータを捨てますか?外部プロセスのオーバーヘッドを処理できますか?
- どのようなデータを交換していますか?正規化されていますか?それとも、正規化する価値がありますか?
- 後でそのデータを参照する必要がありますか?または、処理後に破棄できますか?
-
これらのスクリプトは別のサーバーで実行されますか?
-
ロック機構付きのフラットファイル
- リレーショナルDB
- ドキュメントDB(キー/値ストア、永続的かどうか)
- 共有メモリ(APC、またはコア機能)
- メッセージキュー(アクティブなMQおよび会社)
複数のマシンでメッセージ/データを管理し、複数のマシンでメッセージ/データを生成/消費できるため、プロセスを外部化することで最大の価値が得られると思います。
PHPスクリプトが動作するモデルには、これらのスクリプトのメモリに永続性があるという概念は実際には含まれていません。一般に、これらのスクリプトは、要求されたページを処理するために必要な最小限の時間だけ実行されるように設計されているためです通常、ページが提供されると、スクリプトが行うことはもうないので、これにより、これらのスクリプト間のステートフル通信を有意義に使用することが難しくなります。したがって、通常、PHPスクリプト間の通信は、データベースエントリなどの操作によって行われます。
データをやり取りしたいような継続的な処理が必要な場合は、サーブレットなどの他のWebアプリケーションモデルを検討することをお勧めします。
ここで説明されているように、いくつかの共有メモリでこれを行うことができるはずです: http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/ (想定します) Windowsで実行されていません)