Как создать веб-приложение для компиляции и запуска кода Java / C / PHP в Интернете?

Хотя это вопрос с более широким охватом, я хочу написать онлайн-тестовый код для моей компании, где людям могут быть заданы вопросы для написания кода в java / php / c и т. Д., А также запуск и компиляция кода в Интернете. Я видел, как это происходит на сайте, например, в кодекадемии, Udacity и т. Д. Просто хочу понять архитектуру, стоящую за ней. Я много искал по сходным строкам в Google, но не смог найти конкретный ответ. Хотя после чтения бит и кусочков здесь и там я понял, что код отправляется компилятору на сервер, а затем результаты отправляются обратно. Не знаете, как это происходит. Может кто-нибудь указать мне на отправную точку.

То, что вы в принципе можете иметь, в соответствии с шаблоном MVC, применяемым к веб-архитектуре, выглядит примерно так:

  • Клиентская часть веб-приложения, которая позволяет пользователю вставлять некоторый код, возможно, используя Javascript для ранней синтаксической проверки
  • Конечная точка сервера, получающая вставленный код в качестве входа от клиента

Последовательность операций может быть:

  1. На стороне сервера вход преобразуется в соответствующую структуру для целевого языка программирования, например, класса Java или модуля C.
  2. Возможно, определено больше контекста (например, путь к классам).
  3. Затем, если язык компилируется, вызывается компилятор (например, javac или gcc). Это может произойти несколькими способами, например exec в C или Runtime.getRuntime (). Exec в Java. В противном случае код может быть развернут на сервере или некоторые симуляторы могут быть запущены и переданы код.
  4. Впоследствии код выполняется, и вывод перехватывается (например, путем направления вывода консоли в файл или просто использования инфраструктуры целевого языка, как в этом примере ). Выполнение может выполняться через командную строку (например, java) или с помощью других инструментов (например, завиток для запуска развернутого php-кода, поскольку он был доступным для него браузером-клиентом)
  5. Последний шаг для сервера – отправить обратно перехваченный вывод клиенту в читаемом формате, например HTML. В качестве альтернативы, если вы использовали Java, вы можете пойти на Applet , который не изменит базовую архитектуру.

Однако, в общем, дело в том, что компиляторы и интерпретаторы являются базовым программным обеспечением. Они не предназначены для обычных пользователей, которые могут легко работать только с операционной системой. Поэтому «компиляция на линии», насколько мне известно, отличается от «кода публикации, разрешения на выполнение на сервере и визуализации ответа». Онлайн-компиляция будет означать распределение ответственности за компиляцию по сети, что имеет смысл, но, на мой взгляд, оно не предназначено для демонстративной цели (например, вы упоминаете).

Я использовал domjudge для своей компании и настроил ее для моей потребности.

PHP-код очень хорошо написан. Он очень модульный и прост в адаптации к вашим требованиям.