HTTP框架笔记II | 青训营笔记

49 阅读4分钟

分层设计

OSI

计算机网络最经典的网络分层结构就是OSI七层网络模型, 采用这种分层设计将网络这种大的抽象概念分成了 好几个小层, 不仅可以使网络结构更加清晰, 还拥有专注性(使程序员可以更专注的完成该层的操作,不用考虑其他层出现的问题),扩展性,复用性

HTTP

HTTP框架则主要追求的是高内聚低耦合,易复用和高扩展性

image.png

应用层设计

应用层设计应在完成服务逻辑的基础上尽量保证代码的易读性,可理解性等规则

中间件设计

  • 中间件应配合Handler实现一个完整的请求处理生命周期
  • 拥有预处理逻辑与后处理逻辑
  • 可以注册多中间件
  • 对上层模块用户逻辑模块易用 中间件设计也应遵循一些准则
  1. 单一责任原则:每个中间件应该专注于执行一个特定的任务或处理一个特定的功能。
  2. 可组合性:中间件应该设计成可以方便地组合使用。这意味着它们应该能够按照特定的顺序堆叠在一起,以便形成请求处理管道。
  3. 链式调用:中间件应该设计成通过链式调用的方式来执行
  4. 上下文传递:中间件应该能够在处理过程中传递上下文信息。上下文可以是请求对象、响应对象或其他自定义的上下文数据。通过在中间件之间传递上下文,可以在不同的中间件中共享数据,并使得处理逻辑更加灵活和可定制。
  5. 错误处理:中间件应该能够处理和传播错误。当一个中间件在处理过程中发生错误时,它应该能够捕获错误并根据需要采取适当的措施,比如返回一个错误响应或记录错误日志。此外,中间件应该能够将错误传递给下一个中间件或处理程序,以便进行进一步的处理。
  6. 可配置性:中间件应该设计成具有可配置的选项和参数。这样,开发者可以根据特定的需求来定制中间件的行为。例如,可以允许开发者配置中间件的执行顺序、启用或禁用某些功能,或者设置特定的选项。

网络层设计

网络层设计主要有BIO和NIO两种

BIO

BIO即阻塞IO

  • 在阻塞 I/O 模型中,每个 I/O 操作都会阻塞当前线程的执行,直到操作完成或发生错误。这意味着在进行网络操作时,线程会被阻塞,无法执行其他任务。
  • 使用阻塞 I/O 模型时,通常需要为每个连接分配一个独立的线程。这样,在有大量并发连接的情况下,会导致线程数量过多,消耗大量的系统资源,并且线程切换的开销也很高。
  • 阻塞 I/O 适用于连接数较少且每个连接有较长时间的 I/O 操作的场景,如传统的同步编程模型。

NIO

NIO即非阻塞IO

  • 在非阻塞 I/O 模型中,可以在一个线程中同时处理多个连接的 I/O 操作。它使用了基于事件驱动的模型,通过轮询检查连接和数据的就绪状态来进行处理。
  • 使用非阻塞 I/O 模型时,一个线程可以同时处理多个连接,不会因为某个连接的 I/O 操作阻塞而影响其他连接的处理。
  • 非阻塞 I/O 通常使用选择器(Selector)来管理多个连接,并通过事件通知机制在连接就绪时进行处理。这种模型可以更高效地利用系统资源,减少线程数量和线程切换的开销。
  • NIO 适用于连接数较多且每个连接的 I/O 操作较短的场景,如高并发的网络应用。