当前位置:主页 > 技术文章 >

技术文章

Technical articles

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

时间:2021-05-01 00:21 点击次数:
  本文摘要:本文已经收录进 : https://github.com/Snailclimb/netty-practical-tutorial (Netty 从入门到实战:手写 HTTP Server+RPC 框架)。

华体会

本文已经收录进 : https://github.com/Snailclimb/netty-practical-tutorial (Netty 从入门到实战:手写 HTTP Server+RPC 框架)。相关项目:https://github.com/Snailclimb/jsoncat (仿 Spring Boot 但差别于 Spring Boot 的一个轻量级的 HTTP 框架)现在正在写的一个叫做 jsoncat 的轻量级 HTTP 框架内置的 HTTP 服务器是我自己基于 Netty 写的,所有的焦点代码加起来不外就几十行。

这得益于 Netty 提供的种种开箱即用的组件,为我们节约了太多事情。这篇文章我会手把手带着小同伴们实现一个浅易的 HTTP Server。如果文章有任何需要改善和完善的地方,接待在评论区指出,配合进步!开始之前为了制止有小同伴不相识 Netty ,还是先来简朴先容它!什么是 Netty?简朴用 3 点来归纳综合一下 Netty 吧!Netty 是一个基于 NIO 的 client-server(客户端服务器)框架,使用它可以快速简朴地开发网络应用法式。

Netty 极大地简化并优化了 TCP 和 UDP 套接字服务器等网络编程,而且性能以及宁静性等许多方面都要更好。Netty 支持多种协议 如 FTP,SMTP,HTTP 以及种种二进制和基于文本的传统协议。本文所要写的 HTTP Server 就得益于 Netty 对 HTTP 协议(超文本传输协议)的支持。

Netty 应用场景有哪些?凭借自己的相识,简朴说一下吧!理论上来说,NIO 可以做的事情 ,使用 Netty 都可以做而且更好。不外,我们还是首先要明确的是 Netty 主要用来做网络通信。实现框架的网络通信模块 : Netty 险些满足任何场景的网络通信需求,因此,框架的网络通信模块可以基于 Netty 来做。

拿 RPC 框架来说! 我们在漫衍式系统中,差别服务节点之间经常需要相互挪用,这个时候就需要 RPC 框架了。差别服务指点的通信是如何做的呢?那就可以使用 Netty 来做了!好比我挪用另外一个节点的方法的话,至少是要让对方知道我挪用的是哪个类中的哪个方法以及相关参数吧!实现一个自己的 HTTP 服务器 :通过 Netty ,我们可以很利便地使用少量代码实现一个简朴的 HTTP 服务器。

Netty 自带了编解码器和消息聚合器,为我们开发节约了许多事!实现一个即时通讯系统 : 使用 Netty 我们可以实现一个可以谈天类似微信的即时通讯系统,这方面的开源项目还蛮多的,可以自行去 Github 找一找。实现消息推送系统 :市面上有许多消息推送系统都是基于 Netty 来做的。

......那些开源项目用到了 Netty?我们平常经常接触的 Dubbo、RocketMQ、Elasticsearch、gRPC 、Spring Cloud Gateway 等等都用到了 Netty。可以说大量的开源项目都用到了 Netty,所以掌握 Netty 有助于你更好的使用这些开源项目而且让你有能力对其举行二次开发。

实际上另有许多许多优秀的项目用到了 Netty,Netty 官方也做了统计,统计效果在这里:https://netty.io/wiki/related-projects.html。实现 HTTP Server 必知的前置知识既然,我们要实现 HTTP Server 那一定先要回首一下 HTTP 协议相关的基础知识。HTTP 协议超文本传输协议(HTTP,HyperText Transfer Protocol)主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我们使用浏览器浏览网页的时候,我们网页就是通过 HTTP 请求举行加载的,整个历程如下图所示。

https://www.seobility.net/en/wiki/HTTP_headersHTTP 协议是基于 TCP 协议的,因此,发送 HTTP 请求之前首先要建设 TCP 毗连也就是要履历 3 次握手。现在使用的 HTTP 协议大部门都是 1.1。在 1.1 的协议内里,默认是开启了 Keep-Alive 的,这样的话建设的毗连就可以在多次请求中被复用了。

相识了 HTTP 协议之后,我们再来看一下 HTTP 报文的内容,这部门内容很重要!(参考图片来自:https://iamgopikrishna.wordpress.com/2014/06/13/4/)HTTP 请求报文:HTTP 响应报文:我们的 HTTP 服务器会在后台剖析 HTTP 请求报文内容,然后凭据报文内容举行处置惩罚之后返回 HTTP 响应报文给客户端。Netty 编解码器如果我们要通过 Netty 处置惩罚 HTTP 请求,需要先举行编解码。

所谓编解码说白了就是在 Netty 传输数据所用的 ByteBuf 和 Netty 中针对 HTTP 请求和响应所提供的工具好比 HttpRequest 和 HttpContent之间相互转换。Netty 自带了 4 个常用的编解码器:HttpRequestEncoder (HTTP 请求编码器):将 HttpRequest 和 HttpContent 编码为 ByteBuf。HttpRequestDecoder (HTTP 请求解码器):将 ByteBuf 解码为 Htt。


本文关键词:华体会,几十,行,代码,基于,Netty,搭建,一个,HTTP,Server

本文来源:华体会-www.bjthhk.com

Copyright © 2002-2021 www.bjthhk.com. 华体会科技 版权所有 备案号:ICP备81302774号-2

在线客服 联系方式 二维码

服务热线

035-908095460

扫一扫,关注我们