跳至主要內容

为什么用WebSocket协议而不是HTTP

Echo Hou...大约 2 分钟计算机网络WebSocket项目原创

为什么用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的长连接反而会长时间占用内存这些资源。所以用什么技术,架构如何设计,是需要根据具体业务场景来判断的。

上次编辑于:
贡献者: houbingzhi123
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8