web 服务机制
我们先跟着 **(Web 服务器工作原理总体描述 01)这张图, 将一次 Web 服务的工作流程过一遍, 我们假设以浏览器作为客户端
(1) 用户做出了一个操作, 可以是填写网址敲回车, 可以是点击链接, 可以是点击按键等, 接着浏览器获取了该事件.
(2) 浏览器与对端服务程序建立 TCP 连接.
(3) 浏览器将用户的事件按照 HTTP 协议格式 ** 打包成一个数据包, 其实质就是在待发送缓冲区中的一段有着 HTTP 协议格式的字节流.
(4) 浏览器确认对端可写, 并将该数据包推入 Internet, 该包经过网络最终递交到对端服务程序.
(5) 服务端程序拿到该数据包后, 同样以 HTTP 协议格式解包, 然后解析客户端的意图.
(6) 得知客户端意图后, 进行分类处理, 或是提供某种文件, 或是处理数据.
(7) 将结果装入缓冲区, 或是 html 文件, 或是一张图片等.
(8) 按照 HTTP 协议格式将 (7) 中的数据打包
(9) 服务器确认对端可写, 并将该数据包推入 Internet, 该包经过网络最终递交到客户端.
(10) 浏览器拿到包后, 以 HTTP 协议格式解包, 然后解析数据, 假设是 HTML 文件.
(11) 浏览器将 HTML 文件展示在页面
以上为 Web 服务器工作基本原理. 其实不难发现, 这仅仅只是一个简单的网络通信. 我们应该深信, 作为一个服务器, 其根本的工作无非有三个
接收数据 2. 发送数据 3. 数据处理
而 Web 服务器的本质就是 接收数据 HTTP 解析 逻辑处理 HTTP 封包 发送数据
高级的服务器无非就是将这三个部分更加细致的设计了.
一. 通信协议
1.HTTP/HTTPS 端口号 80 / 443
HTTPS 就是在 tcp 层上增加一个 ssl/tls 层
2.HTTP 请求响应模型
3. 解析 HTTP 报文: 请求行, 请求头部, 请求体, 响应行, 响应头部, 响应体
二. 套接字通信
socket 是位于应用层和传输层之间的中间抽象层, 应用层通过调用这些接口来发送和接收数据
2.1 单播通信: 一对一
2.2 组播通信: 一对多
组播通信主要在于维护主机与路由器之前的关系, 负责组成员的加入和退出等.
任意一端向路由器, 交换机发送消息, 由路由器来转发消息到每个节点.
具有步骤: 指定组播地址和端口, 加入组播组, 所有节点都在一个组, 每个节点都有发送和接收组内成员信息的功能.
2.3 广播通信
广播通信在于向所有连接路由器的主机发送信息, 而不再关注你是否想要, 不用维护组内关系.
三. 服务器模型
1. 单线程阻塞 io: 只有一个线程处理请求, 阻塞 io, 服务器在读写数据时是阻塞的.
2. 多线程阻塞 io: 支持并发响应, 处理能力得到提高, 但是对服务器资源消耗大, 线程上下文切换成本高.
3. 单线程非阻塞 io: 在调用读写接口后立即返回, 不会阻塞
4. 多线程非阻塞 io: 充分利用多核 CPU, 处理能力得到很大提高.
四. Apache 与 Tomcat
Apache 与 Tomcat 都是 Apache 开源组织开发的用于处理 HTTP 服务的项目, 两者都是免费的, 都可以做为独立的 Web 服务器运行. Apache 是 Web 服务器而 Tomcat 是 Java 应用服务器.
Apache 服务器 只处理 静态 HTML;tomcat 服务器 静态 HTML 动态 JSP Servlet 都能处理.
一般是把 Apache 服务器与 tomcat 服务器 搭配在一起用. Apache 服务器负责处理所有 静态的页面 / 图片等信息. Tomcat 只处理动态的部分.
Apache: 是 C 语言实现的, 专门用来提供 HTTP 服务.
特性: 简单, 速度快, 性能稳定, 可配置(代理)
1, 主要用于解析静态文本, 并发性能高, 侧重于 HTTP 服务;
2, 支持静态页(HTML), 不支持动态请求如: CGI,Servlet/JSP,PHP,ASP 等;
3, 具有很强的可扩展性, 可以通过插件支持 PHP, 还可以单向 Apache 连接 Tomcat 实现连通;
4,Apache 是世界使用排名第一的 Web 服务器.
Tomcat: 是 Java 开发的一个符合 JavaEE 的 Servlet 规范的 JSP 服务器(Servlet 容器), 是 Apache 的扩展.
特性: 免费的 Java 应用服务器
1, 主要用于解析 JSP/Servlet, 侧重于 Servlet 引擎;
2, 支持静态页, 但效率没有 Apache 高; 支持 Servlet,JSP 请求;
3,Tomcat 本身也内置了一个 HTTP 服务器用于支持静态内容, 可以通过 Tomcat 的配置管理工具实现与 Apache 整合.
Apache + Tomcat:
两者整合后优点: 如果请求是静态网页则由 Apache 处理, 并将结果返回; 如果是动态请求, Apache 会将解析工作转发给 Tomcat 处理, Tomcat 处理后将结果通过 Apache 返回. 这样可以达到分工合作, 实现负载远衡, 提高系统的性能.
apache 是 Web 服务器, tomcat 是应用 (java) 服务器, 它只是一个 servlet 容器, 可以认为是 apache 的扩展, 但是可以独立于 apache 运行.
换句话说, apache 是一辆卡车, 上面可以装一些东西如 HTML 等. 但是不能装水, 要装水必须要有容器(桶), 而这个桶也可以不放在卡车上.
参考: https://blog.csdn.net/qq_36359022/article/details/81666221
转自:
来源: https://www.cnblogs.com/xwzp/p/10437998.html