经过了一些时间构思,我准备动手了开始写了,
首先要先来一个服务器,不能妄想所有项目都运行在应用服务器上,所以我只能自己实现一个,他有些基本条件,他不能太大,这样徒劳增加包的大小,并且也没这个必要,他只要能上传文件和数据即可,并且也没有大承载量需求.所以我简单选择了阻塞式socket,通过他模拟一个HTTP服务器.他只要能接受post和get模式提交的数据,并能返回数据既可.
这个很容易,复习了一下HTTP一些基本知识,如下:
HTTP协议无论是请求报文(request message)还是回应报文(response message)都分为四部分:
* 报文头 (initial line )
* 0个或多个header line
* 空行(作为header lines的结束)
* 可选body
HTTP协议是基于行的协议,每一行以\r\n作为分隔符。报文头通常表明报文的类型(例如请求类型),报文头只占一行;
header line附带一些特殊信息,每一个header line占一行,其格式为name:value,即以分号作为分隔;空行也就是一个\r\n;
可选body通常包含数据,例如服务器返回的某个静态HTML文件的内容。
就按照这个基本协议,我写一个HttpServer用来开启服务,HttpServerThread用来处理每个请求.为了减少页面加载产生的磁盘I/O,其实页面也比较少,我缓存了这个唯一的web页面,并将其放在高速缓存中,每次有请求时,复制这块内存,直接反馈回去,提高响应速度.
然后从表头提取信息,整理,提交到对应的处理口中进行处理,具体的处理过程,我会在以后的篇章中再说明.
接下来还有一个比较重要模块,就是反馈,我不想让大家每次请求之后,都伴随页面刷新,但是ajax对应付post请求并不是那么顺畅,于是我使用了一个隐藏的iframe,然后再反馈一个提示框到这个iframe中,用来不刷新给出反馈.
---------------------
最近的这个测试发现方案有些问题,我正在想办法解决,问题在编译代码时,如果出错了,因为提示框的宽度有限,所以错误信息的位置展现不准确,会因为提示框的位置而变化.
这里我要感谢一下我的同事-- roseey,感谢她帮我测试,并修改这个开源模块.