http网络协议

目录

get请求和post请求的区别

IO和NIO区别

HTTP三次握手四次挥手

NIO AIO BIO的区别

什么是NIO多路复用机制?

NIO核心设计思想是什么


get请求和post请求的区别

get和post都有自己的语意,不能随便混用

get请求浏览器会把header和data一并发送过去,服务器响应200 OK。

post请求浏览器会先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 OK。

post比get安全,get参数会直接暴露在浏览器路径

get请求参数通过url传递,post放在Request body中

IO和NIO区别

IO是面向流的,NIO是面向缓冲区的 
IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方;
NIO则能前后移动流中的数据,因为是面向缓冲区的。
IO流是阻塞的,NIO流是不阻塞的
IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了
NIO的非阻塞模式。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。
选择器
Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道,来提高效率。

使用场景:
NIO的优势
1.优势在于一个线程管理多个通道;但是数据的处理将会变得复杂;
2.如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,采用这种;
传统IO的优势:
1.适用于一个线程管理一个通道的情况;因为其中的流数据的读取是阻塞的;
2.如果需要管理同时打开不太多的连接,这些连接会发送大量的数据;

HTTP三次握手四次挥手

http是基于TCP协议的,TCP协议建立连接要3次握手,断开连接要4次挥手。

建立连接过程:

这个过程理解起来,就像两人在喊话:

第一次握手:客户端跟服务端说:你好,我想建立连接

第二次握手:服务端收到客户端请求然后回复:你建立吧

第三次握手:客户端收到服务端回话然后回复:好哒,我要发送了

到此整个建立连接的过程已经结束,开始发送接收数据。

一定要三次握手么,两次行不行?

这么一个场景:

我和领导在微信说:你好,我明天要来上班了

领导看到后回复我,好,你来上班吧

请问根据以上对话判断,

1、领导是否已经收到我的信息? (答案是肯定的)

2、我是否能收到领导的信息? (不确定,万一微信服务器挂了,或者我关机了)

所以这种情况下,我不能确定领导让不让我上班,所以怎么解决呢,我收到领导信息后再次回复领导一声:好的收到。这样两边才能都确保信息是同步的。

连接断开过程:

第一次挥手:客户端告诉服务端,我数据发完了,我要断开连接,自身进入等待结束的状态

第二次挥手:服务端回复客户端,好的,收到,但是我还有一些数据没发完,再等一下

第三次挥手:等服务端数据全部发完了,服务端会再次告诉客户端一声:我数据发完了,咱们断了吧,然后自身进入等待关闭连接的状态

第四次挥手:客户端收到后再回复服务端一声,收到了,那就关闭吧。当服务端收到后会立刻关闭连接,而客户端有一个内部定时器,设定的时长就是两者通信的最大时长,一旦最大时长内没有再收到服务端的请求,那么客户端就认为服务端已经关闭了,客户端就会关闭连接。

建立连接要3次,断开为什么要4次呢?

因为tcp是全双工的,每个方向要单独断开,每个方向2次,所以4次。

一定4次吗,3次不行么,跟建立连接一样,服务端回复的时候顺带请求断开不可以么?

不可以,因为客户端请求服务端断开的时候,客户端向服务端发送数据的这个方向已经没有数据要发送了,但服务端可能仍有信息往客户端发送,需要的时间不好确定,不能一直不回复让客户端等着,只能先回复一个,让客户端断掉,然后服务端把数据发送完了之后再断掉服务端到客户端方向的连接;
 

NIO AIO BIO的区别

IO面向流 NIO 面向缓冲区的 IO各个流都是阻塞的 NIO非阻塞的
 同步:发送一个请求 等待返回 再发送一个请求
 异步:发送一个请求 不需要等待返回 直接可发送下一个请求
BIO:阻塞同步的io 数据读写必须阻塞在一个线程内等在这个线程完成。

NIO:同步非阻塞的IO模型 双向传递数据1.4引入的 可实现多路复用 NIO 核心组件:
 通道(channel):建立链接 传递数据
 缓冲区(Buffer):缓存数据
 选择器(selector):监视通道连接状态 传过来数据没有


什么是NIO多路复用机制?

答:1、采用一个线程维护多个TCP连接的IO操作;线程安全,支持高并发;
2、原理:NIO的选择器将多个不同的channel统一交给selector选择器进行管理;
3、NIO多路复用机制在不用的系统中存在差别,在window中选择器是select去轮循channel获取信息,Linux中选择器是epoll通过注册事件回调通知获取信息; 
4、select中会存在空连接,就是只连接但不发送信息,且select中有数量限制,不能很好的支持高并发; linux操作就出现epoll实现事件驱动回调形式通知,不会存在空轮训的情况,只是对活跃的socket实现主动回调【有信息会主动通知】,这样的性能有很大的提升,避免了空连接,所以时间复杂度为是o(1)


NIO核心设计思想是什么

答:非阻塞式IO,选择器实现IO多路复用机制,缓冲区提高读写效率; 


AIO:异步非阻塞的
同步阻塞模式(BIO):这种模式下,我们的工作模式是先来到厨房,开始烧水,并坐在水壶面前一直等着水烧开。
同步非阻塞模式(NIO):这种模式下,我们的工作模式是先来到厨房,开始烧水,但是我们不一直坐在水壶前面等,而是回到客厅看电视,然后每隔几分钟到厨房看一下水有没有烧开。
异步非阻塞I/O模型(AIO):这种模式下,我们的工作模式是先来到厨房,开始烧水,我们不一一直坐在水壶前面等,也不隔一段时间去看一下,而是在客厅看电视,水壶上面有个开关,水烧开之后他会通知我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值