web-dev-qa-db-ja.com

Java / C / PHPコードをオンラインでコンパイルおよび実行するWebアプリを作成する方法

これはより広い範囲の質問ですが、Java/php/cなどでコードを記述し、コードをオンラインで実行およびコンパイルするための質問を与えられる私の会社用のオンラインテストコードを書きたいと思います。 codeacademy、Udacityなどのサイトでこれが起こっているのを見てきました。その背後にあるアーキテクチャを理解したいだけです。私はGoogleで同じような線に沿ってたくさん検索しましたが、具体的な答えを見つけることができませんでした。あちこちを読んだ後、コードがサーバーのコンパイラに送信され、結果が返されることがわかりました。それがどのように起こるか正確にはわかりません。誰かが私にそれの出発点を指摘できますか?.

16
sushil bharwani

Webアーキテクチャに適用されたMVCパターンに従って、基本的に持つことができるのは次のようなものです。

  • Webアプリケーションのクライアント側。これにより、ユーザーはコードを挿入でき、Javascriptを利用して早期の構文チェックを行うことができます。
  • 挿入されたコードをクライアントからの入力として受け取るサーバーエンドポイント

操作のシーケンスは次のとおりです。

  1. サーバー側では、入力はターゲットのプログラミング言語に適した構造に変換されます。 a JavaクラスまたはCモジュール。
  2. おそらく、より多くのコンテキストが定義されています(クラスパスなど)。
  3. 次に、言語がコンパイルされると、コンパイラが呼び出されます(javacやgccなど)。これは、いくつかの方法で発生する可能性があります。 CのexecまたはJavaのRuntime.getRuntime()。execそれ以外の場合は、コードをサーバーにデプロイするか、一部のシミュレーターを実行してコードを渡すことができます。
  4. その後、コードが実行され、出力がインターセプトされます(たとえば、コンソール出力をファイルに送信するか、または この例 のようにターゲット言語インフラストラクチャを利用するだけです)。実行は、コマンドライン(Javaなど)または他のツール(たとえば、展開されたphpコードを実行するためのcurlを介して実行されます。
  5. サーバーの最後のステップは、インターセプトされた出力を読み取り可能な形式でクライアントに送り返すことです。 HTML。別の方法として、Javaを使用している場合は、基本アーキテクチャを変更しない Applet を使用できます。

ただし、より一般的には、コンパイラとインタープリタは基本ソフトウェアであることがポイントです。これらは一般ユーザー向けではなく、オペレーティングシステムのみで簡単に使用できます。したがって、私の知る限りでは、「オンラインコンパイル」は「コードの投稿、サーバーでの実行、回答の視覚化」とは異なります。オンラインコンパイルは、ネットワーク全体でコンパイルする責任を分散することを意味しますが、それは理にかなっていますが、私の意見では、(あなたが言及しているように)実証目的で使用することを意図していません。

6
Manu

私は domjudge を会社に使用し、必要に応じてカスタマイズしました。

PHPコードは非常によく書かれています。非常にモジュール化されており、要件に合わせて簡単に調整できます。

2
Mohit Jain