世界时间查询服务器(一)

一  本服务器实现的基本业务功能介绍

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链接:

https://github.com/superWangxinrui/hello-world/tree/master/%E4%B8%96%E7%95%8C%E6%97%B6%E9%97%B4%E6%9F%A5%E8%AF%A2%E7%B3%BB%E7%BB%9F

猜你喜欢

转载自blog.csdn.net/superwangxinrui/article/details/81413421