netty准备篇---websocket的理解

WebSocket与Http的区别

先看看Http请求的一个过程:

客户端服务端
1.客户端建立到服务器的 TCP 连接
2.客户端发送请求
3.客户端等待响应
4.服务器收到请求
5.服务器发送响应
6.客户端收到响应
7.请求结束

TCP连接时支持双向同时读写的全双工协议,但是我们看传统的HTTP协议有几个问题:
1、 请求过程是串行的,客户端与服务端相互等待。
2、 请求时单向的,总是必须客户端发起请求。
3、 HTTP协议时无状态的,两个请求时同一个连接发过来,还是从不同的TCP连接发过来,对服务器来说都是等价的
换句话说,传统HTTP 1.0/1.1 协议并没有充分利用TCP连接的能力。


WebSocket协议简述

知道“服务器推”场景的出现。服务器端信息随时可能变化,我们希望将变化后最新的信息理解通知给客户端。传统的解决方案是客户端不断轮询服务器,我们来看看Long poll和Ajax轮询的场景。

1、Ajax轮询的原理。

场景如下:
客户端:啦啦啦,有没有新信息(Request)
服务端:没有(Response)
客户端:啦啦啦,有没有新信息(Request)
服务端:没有。。(Response)
客户端:啦啦啦,有没有新信息(Request)
服务端:你好烦啊,没有啊。。(Response)
客户端:啦啦啦,有没有新消息(Request)
服务端:好啦好啦,有啦给你。(Response)
客户端:啦啦啦,有没有新消息(Request)
服务端:。。。。。没。。。。没。。。没有(Response) ---- loop

2、long poll的原理。
long poll 其实原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话),也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。

场景如下:
客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request)
服务端:额。。 (等待到有消息的时候)。。来 给你(Response)
客户端:啦啦啦,有没有新信息,没有的话就等有了才返回给我吧(Request) -loop

从上面两种方式可以看出,都是再不断地建立HTTP连接,然后等待服务器处理,体现出HTTP协议的一个特点:被动性
其次,这种轮询将产生许多额外的代价, 包括移动端流量收费, 并且编程模型也相对复杂。
因此,是时候开发TCP双向通信的能力了,我们可以重新写一个TCP服务器,使用新的协议来通信。但也许是为了复用HTTP的80端口,依附现有HTTP生态圈,让web应用平滑升级,WebSocket就基于了HTTP协议设计。
一个WebSocket连接的建立过程如下:

客户端服务器
1.客户端简历到服务器的TCP连接
2.客户端请求将当前TCP连接用作WebSocket
3.服务器收到请求,统一并同意并确认将此TCP连接用作WebSocket
4.客户端收到确认,HTTP协议通信结束
5.双方使用websocket协议自由双向通信双方使用websocket协议自由双向通信

websocket 可基于 HTTP 建立, 即 ws 协议, 也可基于 HTTPS 建立, 即 wss 协议, 明显是复用了 HTTP 的基础设施。

下一篇:netty准备篇—基于websocket实现简单网页聊天

参考:
https://developer.aliyun.com/article/69253?spm=a2c6h.14164896.0.0.40af2d0d3AdS8P、
https://www.cnblogs.com/Herzog3/p/5088130.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值