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

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

2 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам