【C/C++学院】(27)项目实战HttpServer

1.BS/CS结构异同

BS就是服务端+浏览器结构的网络程序,对于厂家来讲,只需要提供server,都是通过http协议完成的。

优点:不需要维护客户端软件,用户在使用的时候无需安装任何第三方软件,只需要有浏览器就可以。不管是任何操作系统(windows,linux,ios)缺点:浏览器的功能有限,不能做过于复杂的界面,以及如果有些功能是需要在客户端完成的,浏览器可能实现不了。 CS就是服务端+客户端软件结构的网络程序。对厂家来讲,需要同时提供server和client软件。优点:客户端功能可以根据实际的需求任何扩展,可以实现浏览器做不到的功能。界面也可以很漂亮。缺点:客户需要安装client软件,而且厂家还得需要支持和升级维护客户端软件,如果想实现支持多个操作系统,那么就需要提供多版本的客户端软件。所以维护客户端的工作量会很大。

从商业角度考虑,BS要想捆绑用户,一般手段是设置浏览器默认首页。CS来讲,想尽一切办法让用户安装你的软件,安装以后自动执行。

2.http server连接数据库设计要点

对DB来讲,最大的消耗不是执行select语句,最大的消耗是连接和断开连接。

3.HTTP请求应答步骤

HTTP是基于TCP协议的短连接。

第一步、client通过tcp协议连接到server端第二步、client给server发送请求request(client一个连接只给server发一次request请求)第三步、server给client回复reponse。第四步、双方断开连接(client如果想再次给server发送request那么就必须再次连接到server)

对于http请求最简单一个模型1、客户端发送http请求中GET后面一般跟一个文件名2、服务端会把客户端get的文件下发下去

4.HTTP协议的结构HTTP请求(字符串)360浏览器GET / HTTP/1.1Accept: text/html, application/xhtml+xml, */*Accept-Language: zh-CNUser-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like GeckoAccept-Encoding: gzip, deflateHost: 192.168.27.254:8080Connection: Keep-AliveIE发送的内容GET / HTTP/1.1Accept: text/html, application/xhtml+xml, */*Accept-Language: zh-CNUser-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like GeckoAccept-Encoding: gzip, deflateHost: 192.168.27.254:8080Connection: Keep-AliveHTTP 回复消息头(字符串)HTTP/1.0 200 OKContent-Type: image/x-icon(标识给客户端回复的消息体是什么类型的文件,消息体是衣服图像文件,图像是icon格式的)Transfer-Encoding: chunkedConnection: Keep-AliveAccept-Ranges:bytesContent-Length:2550(消息体的长度,单位:字节)\n回车换行消息体(二进制)具体要给客户端发送的文件二进制流消息尾(字符串)\n\n例如:在浏览器当中输入GET / HTTP/1.1在浏览器当中输入GET /abc.txt HTTP/1.1在http的get请求中s?wd=传智,S代表html当中form的action属性的值wd代表input name属性的值,等号后面就是input的value属性的值。在http协议当中,如果传输的是汉字,那么转义,将汉字的原始编码转化为字节,在每个字节前面加%,后面是16进制表示的字符串,比如“传智“转化完后,%E4%BC%A0%E6%99%BA,对于英文字母,不转义。如果遇到%本身,会把%转义为%25(25代表%的ASCII码)

5.HTML简介

如果浏览器收到的消息体是一个HTML格式的文本文件,那么浏览器就会显示这个HTML文件。如果浏览器收到的消息体是一个图像文件,那么浏览器就会显示这幅图像。如果浏览器收到的是一个二进制的流文件,浏览器会下载这个文件。HTML是一个用特殊格式编写的文本文件,HTML主要的目的是描述一个网页的样子,而不是通常意义上的编程语言。<>标签,对于HTML标签是成对使用的</><HTML></HTML>html文件整体标签<title>是标头<img>图像<body>html体标签<A>超链接标签,其中href属性代表这个超链接指向的域名或IP地址<A href="">去123这个网站</A><p>分段,属性align代表分段在屏幕中的位置<form>标签,可以实现一些控件<input>代表一个控件,type="text",代表是一个lineedit,type="submit"代表是一个按钮,value相当于QT当中控件的Text属性。<head><meta http-equiv="content-type" content="text/html;charset=utf8"></head>代表表示这张网页的字符集

6.阻塞Socket多线程并发程序设计

因为HTPP都是基于短连接的,所以不可能出现服务端同时存在大量client连接的情况发生,所以采用多线程,并不会导致一个进程当中同时存在大量的线程情况发生,阻塞的socket多线程还可以增加每一个客户端连接响应的速度。对于多线程并发,即使其中某一个连接消耗了大量的时间,,也不会影响其他的连接。对于epoll模型来讲,最大的开销不是epoll_wait,而是epool_ctl。那么在HTPP这种短连接的背景下,epoll适合做有大量的客户会连接到server,都长连,不会经常断开或者连接,还有对于每一个连接又不会做大量的数据传输。

如果采用阻塞的多线程并发设计,当主线程不关心具体子线程的退出状态,那么所有的线程可以使用可分离状态。让这些线程自生自灭。

7.项目心得

在建立线程的时候,不能把一个函数的栈地址当做建立线程入口函数的参数传递。

写服务端程序,要尽量利用server资源,以加快程序的处理效率,包括CPU资源,内存资源。

只有经历过地狱般的折磨,才有征服天堂的力量。

【C/C++学院】(27)项目实战HttpServer

相关文章:

你感兴趣的文章:

标签云: