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