几十行代码基于Netty搭建一个 HTTP Server

本文已经收录进 :(Netty 从入门到实战:手写 HTTP Server+RPC 框架) 。 相关项目: (仿 Spring Boot 但不同于 Spring Boot 的一个轻量级的 HTTP 框架)
目前正在写的一个叫做 jsoncat 的轻量级 HTTP 框架内置的 HTTP 服务器是我自己基于 Netty 写的 , 所有的核心代码加起来不过就几十行 。 这得益于 Netty 提供的各种开箱即用的组件 , 为我们节省了太多事情 。
这篇文章我会手把手带着小伙伴们实现一个简易的 HTTP Server 。
如果文章有任何需要改善和完善的地方 , 欢迎在评论区指出 , 共同进步!
开始之前为了避免有小伙伴不了解 Netty, 还是先来简单介绍它!
什么是 Netty?简单用 3 点来概括一下 Netty 吧!

  1. Netty 是一个基于 NIO 的 client-server(客户端服务器)框架 , 使用它可以快速简单地开发网络应用程序 。
  2. Netty 极大地简化并优化了 TCP 和 UDP 套接字服务器等网络编程,并且性能以及安全性等很多方面都要更好 。
  3. Netty 支持多种协议 如 FTP , SMTP , HTTP 以及各种二进制和基于文本的传统协议 。 本文所要写的 HTTP Server 就得益于 Netty 对 HTTP 协议(超文本传输协议)的支持 。
Netty 应用场景有哪些?凭借自己的了解 , 简单说一下吧!理论上来说 , NIO 可以做的事情, 使用 Netty 都可以做并且更好 。
不过 , 我们还是首先要明确的是 Netty 主要用来做网络通信。
  1. 实现框架的网络通信模块 : Netty 几乎满足任何场景的网络通信需求 , 因此 , 框架的网络通信模块可以基于 Netty 来做 。 拿 RPC 框架来说! 我们在分布式系统中 , 不同服务节点之间经常需要相互调用 , 这个时候就需要 RPC 框架了 。 不同服务指点的通信是如何做的呢?那就可以使用 Netty 来做了!比如我调用另外一个节点的方法的话 , 至少是要让对方知道我调用的是哪个类中的哪个方法以及相关参数吧!
  2. 实现一个自己的 HTTP 服务器 :通过 Netty, 我们可以很方便地使用少量代码实现一个简单的 HTTP 服务器 。 Netty 自带了编解码器和消息聚合器 , 为我们开发节省了很多事!
  3. 实现一个即时通讯系统 : 使用 Netty 我们可以实现一个可以聊天类似微信的即时通讯系统 , 这方面的开源项目还蛮多的 , 可以自行去 Github 找一找 。
  4. 实现消息推送系统 :市面上有很多消息推送系统都是基于 Netty 来做的 。
  5. ......
那些开源项目用到了 Netty?我们平常经常接触的 Dubbo、RocketMQ、Elasticsearch、gRPC 、Spring Cloud Gateway 等等都用到了 Netty 。
可以说大量的开源项目都用到了 Netty , 所以掌握 Netty 有助于你更好的使用这些开源项目并且让你有能力对其进行二次开发 。
实际上还有很多很多优秀的项目用到了 Netty,Netty 官方也做了统计 , 统计结果在这里:。
实现 HTTP Server 必知的前置知识既然 , 我们要实现 HTTP Server 那必然先要回顾一下 HTTP 协议相关的基础知识 。
HTTP 协议【几十行代码基于Netty搭建一个 HTTP Server】超文本传输协议(HTTP , HyperText Transfer Protocol)主要是为 Web 浏览器与 Web 服务器之间的通信而设计的 。
当我们使用浏览器浏览网页的时候 , 我们网页就是通过 HTTP 请求进行加载的 , 整个过程如下图所示 。
几十行代码基于Netty搭建一个 HTTP Server文章插图
HTTP 协议是基于 TCP 协议的 , 因此 , 发送 HTTP 请求之前首先要建立 TCP 连接也就是要经历 3 次握手 。 目前使用的 HTTP 协议大部分都是 1.1 。 在 1.1 的协议里面 , 默认是开启了 Keep-Alive 的 , 这样的话建立的连接就可以在多次请求中被复用了 。


推荐阅读