如何创建Web应用程序来在线编译和运行Java/C/PHP代码


How to Create a Web App to Compile and Run Java/C/PHP Code Online?

虽然这是一个范围更广的问题,但我想为我的公司编写一个在线测试代码,在这里,人们可以得到用java/php/c等编写代码的问题,并且代码可以在线运行和编译。我在codeacademy、Udacity等网站上看到过这种情况。我只是想了解它背后的架构。我在谷歌上搜索了很多类似的内容,但没有找到具体的答案。尽管在阅读了这里和那里的点点滴滴之后,我明白了代码被发送到服务器上的编译器,然后结果被发送回来。不确定这到底是怎么发生的。有人能给我指一下它的起点吗?

根据应用于web架构的MVC模式,您基本上可以拥有以下内容:

  • 允许用户插入一些代码的web应用客户端,可能利用Javascript进行早期语法检查
  • 服务器端点,从客户端接收作为输入的插入的代码

操作顺序可以是:

  1. 在服务器端,输入被转换为目标编程语言的适当结构,例如Java类或C模块
  2. 可能定义了更多的上下文(例如类路径)
  3. 然后,如果编译了该语言,就会调用编译器(例如javac或gcc)。这种情况可以通过多种方式发生,例如C中的exec或Java中的Runtime.getRuntime().exec。否则,代码可以部署在服务器上,或者可以运行一些模拟器并传递代码
  4. 随后,执行代码并拦截输出(例如,通过将控制台输出定向到文件或仅利用目标语言基础设施,如本例所示)。执行可以通过命令行(例如java)或其他工具(例如curl,用于运行已部署的php代码,因为它是访问它的客户端浏览器)进行
  5. 服务器的最后一步是以可读格式(例如HTML)将截获的输出发送回客户端。作为一种选择,如果你使用Java,你可以选择Applet,它不会改变基本的体系结构

然而,更一般地说,重点是编译器和解释器是基础软件。它们不适用于普通用户,因为普通用户只能轻松地使用操作系统。因此,据我所知,"在线编译"不同于"发布代码,让它在服务器上执行,并可视化答案"。在线编译意味着在整个网络上分配编译的责任,这确实是有道理的,但在我看来,这并不意味着用于示范目的(就像你提到的那样)。

我为我的公司使用了domjudge,并根据我的需要进行了定制。

PHP代码写得很好。它是非常模块化和简单的,以适应您的需求。