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

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

14

Решение

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

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

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

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

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

5

Другие решения

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

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

2

По вопросам рекламы [email protected]