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.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: 192.168.27.254:8080
Connection: Keep-Alive
IE发送的内容
GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: 192.168.27.254:8080
Connection: Keep-Alive

HTTP 回复

消息头(字符串)
HTTP/1.0 200 OK
Content-Type: image/x-icon(标识给客户端回复的消息体是什么类型的文件,消息体是衣服图像文件,图像是icon格式的)
Transfer-Encoding: chunked
Connection: Keep-Alive
Accept-Ranges:bytes
Content-Length:2550(消息体的长度,单位:字节)
\n回车换行
消息体(二进制)
具体要给客户端发送的文件二进制流
消息尾(字符串)
\n
\n

例如:在浏览器当中输入http://serverid/
GET / HTTP/1.1
在浏览器当中输入http://serverid/abc.txt
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="http://www.123.com">去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资源,内存资源。

如果是一个函数内部要给参数分配空间,那么这个参数必须是2级指针。
对于HTTP Server来讲,基本原则就是快速的处理来自客户端的连接,只要给客户下发了reponse,立刻断开连接。
注意的地方:
    对于http,默认的端口是80端口,但是linux普通用户是没有权限在80端口bind的,只有root才有权限bind 80端口。并且注意防火墙的设置。

【C/C++学院】(27)项目实战HttpServer--原理分析相关推荐

  1. java进阶Kafka集群实战之原理分析及优化教程全在这里

    我不去想是否能够成功 既然选择了Java 便只顾风雨兼程 我不去想能否征服Kafka集群 既然钟情于Java 就勇敢地追随千锋 我不去想Kafka集群有多么晦涩难懂 既然目标是远方 留给世界的只能是努 ...

  2. RocketMQ延迟消息的代码实战及原理分析

    RocketMQ简介 RocketMQ是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的.高可靠.万亿级容量.灵活可伸缩的消息发布与订阅服务. 它前身是MetaQ,是阿里基于Kafka ...

  3. 微前端项目实战及原理

    背景 使用微前端在项目中主要是解决使用iframe引入第三方页面时遇到的框架受限,页面交互不统一等问题,项目中遇到的问题大概如下: iframe 内部路由跳转,不会影响到外部的路由地址,无法记住当前访 ...

  4. 58同城Android端-最小插件化框架实战和原理分析

    目录 背景 插件化需要了解的知识 2.1 类加载过程和类加载器 2.2 ClassLoader 的 findClass.findLibrary.findResource 2.3 DexClassLoa ...

  5. Maven实战与原理分析(一):maven超全使用指南总结

    maven package和maven install 有什么区别? 你常用的maven命令有哪些? <dependencyManagement> 是干什么的? 还有用过其它构建工具吗? ...

  6. SpringCloud实战与原理分析--第二章:SpringCloud介绍

    我准备向他提出一个他不可能拒绝的条件.--<教父> 1.引言 首先,我们来看看一般的微服务架构需要的功能或使用场景: (1)我们把整个系统根据业务拆分成几个子系统. (2)每个子系统可以部 ...

  7. 企业项目实战---ELK日志分析平台之logstash数据采集(二)

    ELK日志分析平台 logstash数据采集 1.logstash简介 2.Logstash安装 3.标准输入到标准输出 4.标准输入到文件 5.标准输入到es主机 6.指定文件输入到es主机 7.s ...

  8. 项目实战!Python分析广州房地产市场,房价还会再涨吗?

    今天给分析一个项目实操案例,结合房地产业务,针对广州这一城市,运用Python来进行数据分析,希望能为大家提供一点分析思路. 分析背景 为什么要分析房地产市场?房地产行业具有鲜明的地域特征,从房地产企 ...

  9. SS00027.algorithm——|ArithmeticMachine.v27|——|Machine:项目实战.v04|竞争分析|

    一.竞争分析 ### --- 竞争分析 ~~~ 依据之前的top100品牌数据,分析市场份额前三的商家:拜耳,科凌虫控,安速.### --- 分析流程 ~~~ 人群画像分析:三个品牌的人群特征基本一致 ...

最新文章

  1. python 苹果李子橙_Python模块知识6:OS、SYS模块
  2. 数值分析之数值稳定性篇
  3. 深度探索C++ 对象模型(6)-Data member的存取
  4. java中gc是啥_java的gc是什么
  5. tensorflow-计算图
  6. 促进新一代人工智能产业发展三年行动计划_工信部新一代人工智能产业创新重点揭榜任务——中国联通智能化网络基础设施及开放平台启动会成功召开...
  7. python 创建类_python 用type()创建类
  8. Maven 核心原理
  9. 记录——《C Primer Plus (第五版)》第七章编程练习第九题
  10. 报错ValueError: check_hostname requires server_hostname
  11. smarty 模板不能正常加载css,js的问题
  12. console application
  13. 记账系统推荐金蝶精斗云_小编总结了金蝶精斗云财务软件的优劣势
  14. Keil 5 解锁被锁定的文件 修改其中的代码 STM32
  15. Tomcat Get请求中文乱码
  16. Pickit 3D视觉定位抓取系统 -硅步机器人
  17. java excel 创建控件_Java 添加、删除Excel表单控件
  18. Swing绝对布局之setBounds
  19. 银行业务中台和阿里中台的异曲同工之妙
  20. pc端客户端爬虫_爬虫微博模拟登陆-从移动端到PC端

热门文章

  1. python numpy模块
  2. swust oj 962
  3. Xshell关闭导致jar服务终止,使Jar在CentOS后台运行
  4. iOS UINavigationController
  5. 归并排序树状数组求逆序数
  6. 如何从开发人员走向架构师
  7. LR(0)语法制导翻译
  8. java 故障排查_目前最全的 Java 服务问题排查套路
  9. python连sql server学生管理系统_Python 跨平台连接 SQL Server
  10. mysql是逻辑库吗_mycat是一种比较简单的中间件产品,可以帮助mysql进行分库,同时统一在一个逻辑库。硬件环境:系统:centos 7.6数据库版本:5.7.19mycat:...