Как создать веб-приложение для компиляции и запуска кода Java/C/PHP Online?
Хотя это вопрос с более широкой областью применения, я хочу написать тестовый код для своей компании, где людям могут быть заданы вопросы для написания кода в java/php/c и т. Д., А код запускается и компилируется онлайн. Я видел, как это происходит на сайте, как Codeacademy, Udacity и т. Д. Просто хочу понять архитектуру этого. Я много искал по похожим линиям в Google, но не смог найти конкретный ответ. Хотя после прочтения здесь и там я понял, что код отправляется компилятору на сервер, а затем результаты отправляются обратно. Не уверен, как именно это происходит. Может кто-нибудь указать мне на отправную точку этого.
2 ответа
То, что вы можете получить в соответствии с шаблоном MVC, применяемым к веб-архитектуре, примерно так:
- Клиентская часть веб-приложения, которая позволяет пользователю вставить некоторый код, возможно, используя Javascript для ранней синтаксической проверки
- Конечная точка сервера, получающая вставленный код в качестве ввода от клиента
Последовательность операций может быть:
- На стороне сервера ввод преобразуется в соответствующую структуру для целевого языка программирования, например, класс Java или модуль C.
- Возможно, определено больше контекста (например, путь к классу).
- Затем, если язык скомпилирован, вызывается компилятор (например, javac или gcc). Это может происходить несколькими способами, например, exec в C или Runtime.getRuntime(). Exec в Java. В противном случае код можно развернуть на сервере или запустить некоторые симуляторы и передать код.
- Впоследствии код выполняется, и вывод перехватывается (например, путем направления вывода консоли в файл или просто используя целевую языковую инфраструктуру, как в этом примере). Выполнение может происходить через командную строку (например, java) или с помощью других инструментов (например, curl для запуска развернутого php-кода, поскольку это был клиентский браузер, обращающийся к нему)
- Последний шаг для сервера - отправить обратно перехваченный вывод клиенту в читаемом формате, например HTML. В качестве альтернативы, если вы использовали Java, вы могли бы пойти на апплет, который не меняет базовую архитектуру.
Однако, в целом, дело в том, что компиляторы и интерпретаторы являются базовым программным обеспечением. Они не предназначены для обычных пользователей, которые могут легко жить только с операционной системой. Поэтому, насколько мне известно, "онлайн-компиляция" отличается от "публикации кода, его выполнения на сервере и визуализации ответа". Онлайн-компиляция будет означать распределение ответственности за компиляцию по сети, что имеет смысл, но, на мой взгляд, она не предназначена для демонстрационных целей (как вы упоминаете).