24

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

4

2 回答 2

8

根据应用于 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,它不会改变基本架构。

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

于 2014-09-22T06:28:19.363 回答
2

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

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

于 2014-09-22T06:26:40.087 回答