从永远到永远-网络编程-netty的学习

结合弹幕系统,学习netty的使用。玛德,视频讲到一半进行了半小时的卖课,很头疼,这篇需要再找资料补充!!
一、关于netty
1.什么是netty?
netty是一个基于NIO的网络编程框架,可以使我们快速、简单地开发网络应用。(可结合上一篇理解)
netty的应用:
在这里插入图片描述
2、以http实现为例,帮助理解netty
http协议交互本质:
传输数据:通过tcp/ip实现,对应到Java就是socket编程实现。(说白了,连上)
交换数据:客户端、服务端能够识别对方发来的数据。所以需要制定报文编码格式,双方以此格式编码数据。
如下分别为,请求和响应报文格式:
1)request报文:请求过来后,先将二进制数据转换成字符串,以空格,\r\n,:等分割各个部分。
在这里插入图片描述
1>请求行:分别包含请求方法(我们平时说的get、post等),url,版本。之后以\r\n与请求头分割。(我们平时说的cokkie就是放在这里的)
2>请求头:键值对方式存储参数,每个参数间以\r\n分割,当连续出现两个\r\n时,代表空白行,以空白行与请求体分割。
3>请求体:包含请求参数数据。
在这里插入图片描述
2)response报文:类比上边理解
在这里插入图片描述
解码,如果body很大,比如传了200m视频,他是分开解码的。ByteBuf(二进制流),先经过HTTP Request Decoder解码器解码。首先解码requestlin和httpHeader,将其转换成一个HTTP T request。(

这里有疑问,第一个httpcontent到底包不包括请求头信息

)然后依次解码请求体内容解析成一个个的HttpContent,当解码到最后一个LastHttpContent时,他知道解析完了。将其一起扔给servlet处理,处理完后再编码扔给response(

这里是类似的编码操作嘛????

)。如果说最后一个lastHttpContent不足8192,而同时又不止发送了一个数据,那么会继续在这个content中放入下一个请求的数据。就是我们说的拆包粘包(

拆包粘包还要再看看

)。
在这里插入图片描述

一、架构设计
1.基于ajax
在这里插入图片描述
这种设计方式可以实现但是存在弊端:
ajax不停进行轮询,相当于定时发送http协议的请求,弹幕后台有数据就返回给客户端,否则就空轮询。
弊端:
有一部分时间在进行空轮询,对资源是一个浪费。而且这种每隔一段时间轮询一次的模式,会导致一点时间的延迟。
2.基于netty
在这里插入图片描述
两个架构模式区别主要体现在:
1)
websocket协议(底层也是基于http):全双工协议(客户端与服务端都可以主动发起通讯
http协议:半双工协议(客户端与服务端可以进行相互通讯,但是只能由客户端主动发起通讯,服务端只能被动响应)这也就是他需要客户端有ajax不停轮询的原因,服务端不能在有数据需要推送时主动发起通讯。
2)
http协议:超文本协议(理解简单,扩展性好)
websocket:二进制协议(体积小,更适合面对高并发场景)
当然在实际传输中,二者应该都是以二进制流的方式传输,这里说的时报文之类的格式。

感谢公开课视频:https://www.bilibili.com/video/av61780109/,讲了半个小时的广告,是真的牛比。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值