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

虽然这是一个范围更广的问题,但我想为我的公司编写一个在线测试代码,人们可以在java / php / c等中编写代码并运行代码并在线编译。 我在网站上看到过这种情况,比如codeacademy,Udacity等。只是想了解它背后的架构。 我在Google上搜索过很多相似的行,但是找不到具体的答案。 虽然在这里和那里阅读了点点滴滴后,我知道代码被发送到服务器上的编译器,然后结果被发回。 不知道究竟是怎么回事。 有人能指出我的起点吗?

根据应用于Web架构的MVC模式,您基本上可以拥有的是这样的:

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

操作顺序可以是:

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

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

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

PHP代码写得很好。 它非常模块化,易于满足您的要求。