Webアプリケーションのバックエンド(単純なLAMP設定)でレポートを生成する単純なC++アプリケーションがあります。問題は、バックエンドが約1.5GBのメモリを必要とするデータファイルをロードすることです。
プログラムAは常にサーバー上で実行され、常にデータがロードされているメインの実行可能ファイルであり、実際にレポートを実行できます。
プログラムBはphpから生成され、必要な情報を取得するためにプログラムAに簡単なリクエストを行い、データを返します。
私の質問は次のとおりです: BにAに何かをさせる良い仕組みは何ですか? Aが何もしていない場合、どのように動作しますか?私は本当にタスクや他の方法で私のタイヤを回転させてポーリングしたくない。C++でのプロセス間通信
答えて
名前付きのミューテックス/イベントを使用すると、基本的には1つのスレッド(あなたの場合はプロセスA)が待っているのを待つことができます。次にプロセスBが実行され、処理が必要なミューテックス/イベントを通知し、プロセスAを起動します。
は、Microsoftにある場合:Linux上
IPCは、異なる動作しますが、同じ機能があります。
または代わりに、C++の部分ますマルチプラットフォームのブーストIPCライブラリの1つを使用できます。私はPHPが利用できるものがよく分からないが、疑いの余地のないものがあるだろう。
+1ネットワークカードを叩く必要はありません。特に、同じボックスでWebサーバーを実行している場合は特にそうです。 – Alex
+1は、ブーストプロセスに言及しています。 http://www.boost.org/doc/libs/1_39_0/doc/html/interprocess.html – Laserallan
ありがとう!私はBoostメッセージキューのペアを使用するつもりだと思う。 – captncraig
localhost
で動作するTCPソケットを使用します。
- C++アプリケーションをデーモンにします。
- PHPフロントエンドは、デーモンへの永続的な接続を作成します。 pfsockopen
- リクエストが行われると、PHPはデーモンにリクエストを送信し、デーモンはそのリクエストをすべて処理して返します。 PHP SocketsC++ Sockets
EDIT
は、参考のためにいくつかのリンクを追加しました。私はいくつかが本当に悪いかもしれないどこでもプロセス間通信のソケットを使用するCコード。
これはやや面白いようです。しかし、私にとってはむしろ外国人に聞こえる。使用中の参考資料や例がありますか? – captncraig
IPCはC++上で簡単ですが、POSIX C APIを呼び出すだけです。
しかし、あなたが求めているのは、キューマネージャーの方がはるかに良いでしょう。バックグラウンドデーモンがキュー上のメッセージを待つようにし、フロントエンドPHPは処理したいタスクの仕様を追加するだけです。キュー・マネージャーによっては、タスクの結果を同じオブジェクトに追加することができます。また、完了メッセージの新しいキューを定義することもできます。
最もよく知られている高性能キュー・マネージャの1つがRabbitMQです。非常に使いやすいもう1つはMemcacheQです。
または、タスクのためにMySQLにテーブルを追加するだけで、バックグラウンドプロセスは未完了のものを定期的に照会します。これはうまく動作し、非常に信頼できる(ゲットーキューと呼ばれることもあります)が、高いタスク数/秒で故障します。
ええ、それは本当に私が使用したいメッセージキューのように聞こえる。メッセージがなくてもバックグラウンド処理がブロックされるので、うまくいくでしょう。ありがとう! – captncraig
- 1. プロセス間通信
- 2. 2つのプロセス間のFIFO通信c
- 3. プロセス間の通信
- 4. Luaでのプロセス間通信
- 5. javaプロセス間通信
- 6. Javaプロセス間通信
- 7. SystemTapプロセス間通信
- 8. XCode(Objective C)とCプログラム間のプロセス間通信
- 9. Linuxのプロセス間通信
- 10. Pythonプロセス間の通信
- 11. F#のプロセス間通信
- 12. リアルタイムデータのiOSプロセス間通信
- 13. 親プロセスと子プロセスの間の通信
- 14. C++とvb.netのアプリケーション間のプロセス間通信
- 15. Windows OS環境のC++アプリケーションとJavaアプリケーション間のプロセス間通信
- 16. プロセス間通信用UDP
- 17. PHP Mysqlプロセス間通信TLS
- 18. プロセス間通信、オペレーティングシステム、パイプ
- 19. ローカルファイルソケットを使用したPythonとC++間のプロセス間通信?
- 20. Windowsでのプロセス間通信(IPC)の例
- 21. 言語/オペレーティングシステム間のプロセス間通信
- 22. iPhoneアプリ間のプロセス間通信
- 23. Qt4での簡単なプロセス間通信
- 24. スタートアップとプロセス間通信で稼働中
- 25. 2つの実行中プロセス間のプロセス間通信
- 26. 2つのプロセス間の通信方法
- 27. プロセス間通信のためのUDP
- 28. RailsとRubyの間の通信EventMachineプロセス
- 29. AndroidJUnitとのプロセス間通信またはadb通信
- 30. プロセス間の通信方法は?
申し訳ありません...これはすべてLinuxで動作しています。 – captncraig
LAMPについて言及して以来、私はlinuxタグを追加しました。 IPCはプラットフォームに依存するため、これが重要です。 –