Professional Documents
Culture Documents
基于 Ajax 的 C 语言 在线
姓名:钟芸龙
东华大学计算机科学与技术学院课外科技活动实验报告
学号:050950225
指导老师:姚砺
东华大学计算机科学与技术学院课外科技活动实验报告
实验 要求
以完成各种可以方便同学在手头没有编译环境的情况(如网吧),完成简单的 C 程序的测
试工作。用户只需输入 C 语言源代码和输入数据(如果没有可以留空),按一下运行按钮
就可以提交至服务器执行,服务器返回最终程序的输出。
相关 技术说 明
求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,因
务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本
地应用慢得多。
为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很
jQuery
的事情。
Kepler
了。
Kepler 的模块虽小,但功能非常完善,其本身是一个强大的模块化的系统,由若干个
JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同
家族的习惯(包括 C, C++, C#, Java, JavaScript, Perl, Python 等)。这些特性使 JSON 成为理
想的数据交换语言。
标记语言,相对而言难以解析,而且冗余信息多,带宽占用也多一些,对于交互性较多的
设计 思想
器的原因。
地简化代码的编写。
使用 Ajax 技术后,服务器只返回浏览器所必需的数据,从而可以减少延迟。另外,返
下面两图分别描述了总体过程:
图 1 WebC 的运行 流程
服务器端运行程序是通过将客户端提交的 C 代码写入到一个临时文件,然后解释之,
并将其错误输出重定向,但运行程序的标准输出则是直接用管道来读取,并最终传回给浏
览器。下图就是服务器端的处理流程:
东华大学计算机科学与技术学院课外科技活动实验报告
图 2 服务器 端的 处
理流程
服务器端具
体的执行的命令
tcc -run C 源
文件 < 输入文件
2>错误输出文件
这里三个文
件都是临时文件,
它们都是在处理
同一次请求时生
成的,在响应完
成后会立即清除。
其中用到了重定
向这一方法,其
中小于号<的作用
是指定程序运行的输入,2>是指定程序的错误输出。重定向用来把原来从键盘读入的内容
可以从文件里读入,也可以将原本输出到屏幕里的内容输出到文件里,这样的好处是可以
容 POSIX 的写法。
至于管道,是指将程序的标准输出连接到另外一个程序的标准输入,这样可以将本来
以像从普通文件一样读取程序的标准输出。相对于临时的磁盘文件来说,管道的读取效率要
高一些,因为它的数据传递都是在内在中完成的,因此在我的程序时,我没有把标准输出
东华大学计算机科学与技术学院课外科技活动实验报告
重定向到临时文件,而是从管道里读取的,虽然重定向也是可行的,但是从管道读取效率
应该更高。
取元素引用:
document.getElementById("id")
置样式,使用起来颇为方便。
XMLHttpRequest 对象,对于浏览器的不兼容性问题做了包装,比直接利用
XMLHttpRequest 对象来处理方便了不少,当然,这层层包装的后果当然造成了效率的降低,
function RunCode(){
if(code==""){
return;
$("#run").attr("disabled","disabled"); //暂时禁用按钮
$.ajax({
东华大学计算机科学与技术学院课外科技活动实验报告
url:"run.lua", //请求网址,用于处理浏览器的请求
success:function(result){
var output=$("#output");
if(result.error){
output.css("color","red");
output.css("font-weight","bold");
output.val(result.error);//若出现错误,则以红色粗体显示在输出框里
}else{
output.css("color","black");
output.css("font-weight","normal");
output.val(result.output); //正常时直接显示
$("#run").attr("disabled","");//启用按钮
//显示服务器运行此程序的时间
})
}
东华大学计算机科学与技术学院课外科技活动实验报告
使用 手册
Xavante,是巴西的一个民族的名字。启动以后会在系统托盘显示一个绿色的图标:
图 3 系统 托盘 里的 Xavante 图标
然后启动浏览器,在浏览器的地址栏输入相应的地址:
图 4 在浏 览器 的地 址栏 里填 入地 址
图 5 在 Code 框里 填入
C 源代 码
图 6 在 Output 框里 显示 出程 序运
行结果
如果程序还需要输入,则在
Input 框里输入要输入的文字:
图 7 在 Input 框里填 入要 输
入的 文字
如果编译出错,则在
东华大学计算机科学与技术学院课外科技活动实验报告
Output 中会以红色粗体字显示编译出错信息:
图 8 如果出 错, 会
在 Output 里显 示
出错误 信息
由于时间仓促,此系统还有很多不足的地方,主要有以下几点:
没有检测程序本身的问题,而只是简单地执行之,这样危险的程序会给服务器带来严
临时文件。
没有分析错误输出,而是直接返回给浏览器,而原始的错误输出内容使用的是临时文
件名,这样显得不大好。
程序还可以加入预期输出内容框,放在浏览器端,当输出数据比较复杂时,可以减轻
比对工作的繁琐。
返回的运行时间只精确到了秒,这个精度实在是太“粗”了。
临时文件的命名是使用当前的秒数,这极有可能在不同的机器在同一秒内请求同一个
服务器时出现冲突。