4

C++ と django ベースの Web アプリで特定のタスクを実行するフレームワークがあります。アイデアは、このフレームワークを起動し、そこからデータを受け取り、データまたはリクエストを送信し、ある期間のステータスを確認することです。

私はコミュニケーションの最良の方法を探しています。どちらのアプリも同じサーバーで実行されます。C++ の json サーバーが良いアイデアかどうか疑問に思っていました。Django はこのサーバーにリクエストを送信し、サーバーはそれを解析し、ワーカー スレッドに委任してタスクを完了させます。送信する必要があるほとんどすべてのデータは文字列のようなものです。その他のデータはデータベースに保存されるので問題ありません。

JSONは良い考えですか?C++ と django の間のローカル通信のためのより良いメカニズムをご存知でしょうか?

4

2 に答える 2

5

要件が常にWebアプリケーションC++と同じマシン上にあることが保証されている場合は、コードを共有ライブラリに変換し、Pythonをラップしてコードを含めます。このようにPythonからC/C ++を呼び出しますか?DjangoC++

JSONおよびその他のシリアル化は、リモート呼び出しを行う予定であり、コードがマシン間で通信する必要がある場合に意味があります。

于 2012-08-27T13:54:28.397 に答える
4

JSON は、データのシリアライゼーションには適切な選択肢のようです。文字列の処理が得意で、Python と C++ の両方で JSON をエンコード/デコードするための既存のライブラリがあります。

ただし、より大きな問題は、クライアントとサーバー間で JSON を転送するために使用するトランスポート プロトコルである可能性が高いと思います。以下にいくつかのオプションを示します。

HTTP サーバーを C++ アプリケーションに組み込むことができます (これは、質問の「JSON サーバー」が意味するものかもしれません)。あなたのために大変な作業を処理するライブラリ。

もう 1 つのオプションは、0MQライブラリを使用して、クライアントとサーバー間で JSON (またはその他の方法で) メッセージを送信することです。これはおそらく、完全な HTTP サーバーを実装するよりもはるかに簡単であり、0MQ には、ネットワーク経由で送信するよりもはるかに高速なプロセス間通信コードがいくつか含まれています。

3 番目のオプションは、C++ をスタンドアロン アプリケーションとして実行し、stdin またはコマンド ライン パラメーターを介してデータを渡すことです。これは、最も柔軟ではないかもしれませんが、おそらく最も簡単な方法です。このようにする場合は、ablm で提案されているように、Python/C++ バインディングを構築するだけの方がよい場合があります。

あるいは、 redisやその他のデータベース システムに基づいて、ある種のジョブ キューの構築を試みることもできます。django アプリケーションがジョブを記述する JSON をジョブ キューに入れ、C++ アプリケーションが定期的にキューをポーリングし、別の redis エントリを使用して結果をクライアントに返すという考えです。これには、最小限の労力で複数の「ワーカー」がジョブ キューから簡単に読み取ることができるという利点があります。

他にもいくつかの方法があることはほぼ間違いありませんが、これらはすぐに思い浮かぶ方法です。

于 2012-08-27T12:00:38.583 に答える