为什么用WebSocket协议而不是HTTP
...大约 2 分钟
为什么用WebSocket协议而不是HTTP
业务需求
业务背景是一个类似于B站的视频弹幕系统,现在需要实现一个用户发送弹幕和获取弹幕(推送弹幕)功能。
场景是这样的,用户进入我们的系统,在视频列表点进自己感兴趣的视频,然后看到了视频上方的弹幕,自己也可以发送一条弹幕,这条弹幕也会推送到所有在线看到视频的用户。
为什么不用HTTP协议
如果我们采用传统的HTTP协议,效果如何?
HTTP协议是短连接,并且是单向的,也就是说,客户端需要不停地轮询服务端:"你那有没有资源?",如果有,会进行一个拉取资源的操作,而服务端并不会主动向客户端推送资源。
这就是短连接的过程,建立连接和释放连接的过程也是要消耗资源的。
TCP三次握手建立连接
拉取资源
TCP四次挥手释放连接
......
TCP三次握手建立连接
拉取资源
TCP四次挥手释放连接
但是,如果服务器此时就没有新增的资源,客户端还是要不断轮询,这又是对资源的浪费。
所以,对于获取弹幕功能,我们没有采用HTTP协议。
WebSocket好在哪里
那么WebSocket协议对比HTTP协议的优势在哪呢,最后我们为什么采用WebSocket协议?
对于弹幕模块,有两个很大的优势。
一是全双工通信,也就是不但客户端能向服务端请求资源,服务端也能向客户端推送资源。
二是长连接,也就是不用频繁请求、断开连接消耗资源,并且弹幕模块本来就是一个长时间请求弹幕的过程,用长连接更适合,并且也是基于TCP协议的,能够保证消息的可靠性。
除此之外,WebSocket协议没有HTTP协议的请求头header
,也就是传输的报文体积更小,消息速度更快。
但是并不是说WebSocket协议就一定优于HTTP协议,HTTP协议协议虽然多了个请求头header,但是易于拓展,并且如果是不需要长时间通信的功能或者接口,用HTTP的短连接更好,用WebSocket的长连接反而会长时间占用内存这些资源。所以用什么技术,架构如何设计,是需要根据具体业务场景来判断的。
Powered by Waline v2.15.8