[百晓生]-linux下http服务器开发

 
[百晓生]-linux下http服务器开发
 
1.mystery引入
    1)超文本传输协议(HTTP)是一种应用于分布式、合作式、多媒体信息系统的应用层协议
    2)工作原理
       1)客户端
            一台客户机与服务器建立连接后,会发送一个请求给服务器,请求方式的格式为:统一资源定位符(URL)、协议版本号,后边是MIME信息,包括请求修饰符、客户机信息和可能的内容。
       2)服务器端
           1)服务器接收到客户机的请求后,首先解析请求信息,根据不同的请求模式给予相应的响应信息。HTTP中规定了6种请求格式,但最常用到的是GET和POST请求
           2)任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户的请求。
           3)服务器端驻留程序接收到请求后,在进行必要的操作后回送所要求的文件,在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(Packet),每个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。
    3)在HTTP请求格式中,最重要的信息有两个,一个是请求的内容,另一个是请求的方法。
    4)数据对是由字段组成,其格式为:valuename=value;数据对与数据对之间由&连接,这是HTTP中定义的请求规则。
    5)在通常的WEB应用中,大数据量的提交一般选用POST方法,小数据量的提交,如查询操作,一般采用GET方法。
    6)请求实体由实体名和实体值组成,它的格式为:Entity:value 

2.HTTP服务器设计
    1)实现功能
        1)在HTTP服务器中,经常要处理的请求是GET,MesteryServer中将要实现针对GET请求的处理
            服务器并不支持CGI功能,所以针对GET中的CGI部分的请求处理,在本版本中不予支持。
        2)利用Gtk编写可视化的界面,三个按钮用于启动、关闭和暂停服务,一个标签用于显示服务状态。
       3)文件传输功能是本 服务器最基本的功能,负责可靠传送用户请求的资源文件。
        4)具有日志功能,会将客户的请求信息存储到本地的日志文件里,以XML格式进行存储。 
    2)业务功能
        1)针对GET请求功能,在这里只支持资源文件的下载,并且可以断点下载
        2)如果是请求资源,则予以响应;如果涉及CGI的请求,则不予以响应。
        3)系统只支持GET请求,对于POST、HEAD、TRACE等请求,都予以忽略。
        4)对于HTTP服务器,它的运行模式是基于请求、响应机制,而下面的文件传输功能,其实是请求的具体执行过程,当服务器端成功解析请求命令后,会针对请求的类型,生成相应的响应码,并传送相应的资源文件。
        5)当请求工作执行完毕时,会形成一条日志记录,并插入到日志文件中。
        6)考虑到服务的关联性,服务器将为每一个请求开启一个单独的线程进行服务,该线程实现客户端请求接受、请求分析、响应码生成与传输、响应文件查找与传输、客户套接字关闭、日志记录写入等功能
    3)可视化界面
          其设计与业务的逻辑采用松耦合,双方只是通过消息的方式,传递控制命令与状态信息。
    4)主服务功能
          提供端口绑定(HTTP默认端口是80)、服务侦听、客户端套接字维护、业务线程创建等。
    5)界面模块
        1)由两个子模块组成:界面显示子模块->绘出程序的运程界面;按钮事件处理子模块
        2)界面模块与主服务模块之间的消息传递采用全局变量共享的方式。
    6)主服务模块
        1)以线程身份存在。
        2)不断轮询全局变量gServerStatus,并通过这个状态来动态调整真实服务状态。
    7)业务处理模块
        1)程序核心部分。
        2)由请求分析子模块、响应处理子模块、文件传输子模块、日志添加子模块等几个子模块组成。 

3.测试效果
    1)本地测试
图片
    
2)文件下载测试
   
图片
    
3)下载数据预览
     
图片

4.源代码
 
    如有需要请QQ联系我
 
 
 

你可能感兴趣的:(http,linux,服务器开发,服务器开发,百晓生)