2012-06-22 31 views
1

我目前正在开发一个编程竞赛网站,并希望实现对提交代码的支持并在网站上运行它。经过相当多的搜索后,我还没有找到任何“指南”。创建一个运行代码的网站

有没有人知道一个网站(或其他来源),其中包含一些基本的指导方针或基本规则呢?

感谢所有回复。 PS:如果有人想知道所有的编程语言标签,我打算至少支持这些语言。

+0

这看起来像是一长串相对简单的步骤。哪一个阻止了你? –

+0

运行javascript,html,css,jquery,看看http://www.jsfiddle.net是如何工作的。要运行php,请查看http://writecodeonline.com/php/。 –

+2

海事组织你的问题太广泛了。此外,我不太了解这个问题。你的应用程序只需要一个解释器来支持你想要支持的所有语言... – home

回答

0

对于Java这是很简单的:

  • 你必须创建Servlet,上传源代码到服务器(例如 通过POST请求)

  • 使用Java编译器API编译源代码到字节码(tutorial

  • 编译的字节码,你可能会动态加载通过ClassLoader并启动它(你也mi GHT配置SecurityManager

  • 而且不要忘了MVC架构:)

1

小心 - 如果你发现很难分解这个项目分成一些较小的,更多的战术问题,我强烈建议您不要尝试在您的网站上实际运行任何其他人的代码。就创建网站本身而言,我建议在可能的情况下利用预先构建的组件或服务 - Wordpress,GitHub等。

一旦您收到提交内容,您将需要一种方法运行它们安全。出于所有实际目的,这意味着你应该假设你运行别人代码的任何机器可能会自发地燃烧起来。虽然这些语言中的某些语言具有您应该可以用来在“沙箱”中运行代码的功能,但您可能无法在所有这些语言中达到足够的专业水平,从而无法妥善保护所有这些语言。

似乎像亚马逊的EC2这样的东西可能会有所帮助 - 当你需要运行一个提交时启动一个虚拟机,当你完成时把它扔掉。他们已经有了一些预配置的图像,可能非常适合运行这些代码,并且如果由于错误或恶意代码而导致某些东西被篡改,那么您并不介意太多,因为您只是要抛出它当你完成后离开。

1

有一个网站已经这样做,尽管是为了特定的目的:抓取数据。

https://scraperwiki.com/ - 与jsfiddle不同,scraperwiki执行服务器端代码。据我可以收集,他们可能通过亚马逊实例沙箱环境。不确定他们的代码可以完全审计和消毒,考虑到各种语言和他们支持的库。

我认为大多数人都很难理解scraperwiki如何阻止黑客和垃圾邮件发送者滥用他们的资源。他们对此很感兴趣;要么他们已经手动审计了每一个被执行的代码,要么黑客/垃圾邮件发送者还没有抓到他们。由于该网站具有特定功能,因此他们可能会检查数据利用率以确定可疑活动。 ......但是,一个男人的网站抓取是另一个男人的骚扰和注入后/后。

我的直觉是,他们永远不会公开说出他们的安全审计过程是什么样子。

如果您确实需要这么做,那么最简单的机械方式就是使用eval()的变体。但是,并非所有的语言都有。这会带你到选项B,这是虚拟化。更好的人比我能解释如何对虚拟机进行军团控制,并会在让陌生人滥用你的资源时给予适当的警告。相反,我会分享我的PHP体验。

几年前我已经做了一个项目,可以在本地机器上执行代码执行。当你输入时,它通过ajax获取代码并在每次击键后执行。以下是其行为视频:http://www.youtube.com/watch?v=Yfxrt2pc3pg

后来有十年时间和三个改进原型,但我仍然不确定我会如何负责任地将其作为一种常见资源进行锁定。