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

2022-08-30 17:53:57

虽然这是一个范围更广的问题,但我想为我的公司编写一个在线测试代码,让人们可以提出用java / php / c等编写代码的问题,并且代码可以在线运行和编译。我已经在codeacademy,Udacity等网站上看到了这种情况。只是想了解它背后的架构。我在Google上搜索了很多类似的内容,但找不到具体的答案。虽然在阅读了这里和那里的零碎内容之后,我明白代码被发送到服务器上的编译器,然后将结果发回。不知道这究竟是怎么发生的。有人可以给我指出它的起点吗?


答案 1

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

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

操作的顺序可以是:

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

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


答案 2

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

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


推荐