一 本服务器实现的基本业务功能介绍
1 首先将服务器启动起来
2 在浏览器输入如下URL
3 就会进入世界时间查询系统的主页
4 比如,您想查询北京时间,那么就在输入框中输入北京,点击查询或者按下回车,系统会自动帮您查询。(查询结果如下),红线标注的部分,您可以进行一些地方特色的查询,一些美食,旅游攻略。
比如:若您想知道咱老北京有哪些美食,您可以点击,北京美食攻略(系统会为您自动查询)
比如,您出差英国伦敦,我们有伦敦美景导航
以上是服务器目前拥有的简单基本功能,还需完善。
二 设计思路:
首先,基于TCP , socket api 搭建一个通用的http服务器,其核心流程为:
那么要解析http请求报文,并且要构造http响应报文,就要知道http报文格式,以下简单的罗列了http报文格式,具体格式请参考《unix网络编程》或者用费德勒抓包工具抓个包来研究一下:
其中,请求报文格式中的首行包括(方法(get或者post),URL,版本号),中间用空格隔开,那么解析的时候,就可以以空格来进行解析。header 是以键值对来存储,每个键值对以‘ :’来分割,body和header部分用空行隔开。
以下是用费德勒抓包工具抓取的https的请求和响应报文格式,大家可以对照着参考一下:
请求报文:
响应报文:
三 页面生成详解
对于页面的生成,分为静态页面和动态页面两种;对于get请求,并且没有query_string,我们则生成静态页面,如果有query_string,则根据query_string来生成不同的动态页面,那么对于post方法,,生成的一定是动态页面,根据body来生成动态页面。
对于动态页面的生成,我们采用了CGI 技术来实现,CGI最大的优点就是“解耦合”,并且可用任何编程语言来实现,但是cgi也有缺点:对于cgi技术,每个请求都必须创建一个子进程,对于创建子进程的开销我们也是知道的,所以用 cgi 写的服务器,对于处理高并发情况下的请求就会出现处理不过来的情况。
四 源码
github链接: