1

私がやりたいことは次のとおりです。サーバーに、画像(Webサーバーに送信される)を分析して結果を返すプログラムを実行させます。プログラムはすでに存在し、C#およびC ++で記述されています。興味深いことに、このプログラムはパターン/グリッドを分析して、金属製の物体にかかる圧力を判断します。その分析には 1 秒もかかりません。

私が知りたいのですが:

  1. プログラムを Web サーバーに保存するにはどうすればよいですか (または、Web サーバーからアクセスできるようにプログラムを保存するにはどうすればよいですか)?
  2. Web サーバーを介してプログラムを呼び出すにはどうすればよいですか?
  3. 上記は PHP などの言語を使用したプログラミングを必要とするものだと思いますが、このコードはどこで記述/実行されますか?
4

2 に答える 2

1

Webサーバーレベルではなく、PHPでこれを実際に行います。

PHP には という名前の関数がありますshell_exec。このコマンドは、プログラムを呼び出すことができます。

$result = shell_exec("./your_program ".escapeshellargs($image_path));

Web サーバーがプログラムを実行する権利を持っているという条件の下で (chmod モード 755 である必要があります)。

(Ps これは *nix で動作するはずですが、Windows では不明です)

(サーバー上でプログラムをコンパイルできない場合は、クロスコンパイルしてからアップロードしてください)

于 2013-04-24T08:47:06.440 に答える
0

この問題の簡単な解決策は、Web 要求内でプログラムを同期的に実行することです (つまり、Web ページはプログラムが結果を配信するまで待機する必要があります)。これは、PHP ページ (または、MVC のようなアーキテクチャを使用している場合はコントローラー) で、system()または類似のものを使用して、サーバー上でプログラムを実行することを意味します。これはおそらく結果を標準出力に出力するか、ファイルやデータベースに出力します。プログラムの実行に 1 秒かかる場合でも、ユーザー数が少ない限り、これはおそらく許容できる遅延です。

これをする:

  • コンソール プログラムをサーバーのどこかに保存します。「C:\My Programs\My Analyser\Analyser.exe」で問題ありません。
  • 画像ファイルのパスの場所を知っておく必要があります。その後、そのパス名をパラメーターとしてコンソール プログラムに渡すことができます。
  • stdoutその後、コンソール プログラムが分析を返す方法に応じて、呼び出しの結果を取得できます。

とはいえ、これを実行するより良い方法は、ジョブ サーバーを実行することです。これにより、プログラムが非同期で実行されます (これは、ジョブ サーバーがプログラムの実行要求を受け入れ、スロットが空いたときに実行されることを意味します)。 . これにより、Web ページの実行速度が向上し、同時に多くの人がプログラムを実行してもサーバーが過負荷になることがなくなります。欠点は、システムのアーキテクチャがより複雑であり、未処理のジョブに対処するために UI を変更する必要があることです。

ジョブ サーバーのセットアップに関心がある場合は、Gearman のようなものを検討してください。サーバーをポーリングして、ジョブが処理されたかどうかを確認するか、ジョブ プロセスで完了フラグをデータベースに書き込む必要があります。これは、Web スクリプトで簡単に確認できます。

于 2013-04-24T15:10:46.123 に答える