本文已参与「新人创作礼」活动,一起开启掘金创作之路。
这两天在看公司的前端项目,因为之前的一个小需求就是在其基础上改的。但在改动期间遇到了很多问题,也是请教了前辈才帮忙配好的。其实一开始就注意到一个 WebSocket,我一直以为这个是跟登录认证有关系,但后来稍稍了解一下,好像并不是,今天简单总结一下自己的理解,可能不正确................
WebSocket 是什么
WebSocket 是运行在 HTTP 上的 Socket 通信规范,提供了与 “TCP Socket” 相似的功能,是一种基于 TCP 的轻量级网络通信协议。
HTTP 协议
HTTP 协议的通信模式是一种 “请求-应答”的“半双工”通信模式,虽然可以双向收发数据,但同一时刻只能在一个方向上操作,传输效率极低。而且,它还是一种“被动”通信模式,服务器只能“被动”响应客户端请求,无法主动向客户端发送数据。导致 HTTP 难以应用到动态页面、即时消息、网络游戏等要求实时通信领域。
有一种解决方法就是轮询。轮询就是不停地向服务器发送 HTTP 请求,询问有没有数据,有数据的话就用响应报文回应,如果轮询的频率比较高,那么就可以近似地实现"实时通信"的效果。但轮询的缺点也很明显,反复发送无效查询请求耗费大量的带宽和 CPU 资源,成本非常大。
WebSocket 就是解决了 HTTP 上述问题
总结
浏览器是一个“沙盒”环境,有很多的限制,不允许建立 TCP 连接收发数据。而有了 WebSocket,我们就可以在浏览器里与服务器直接建立“TCP 连接”,获得更多的自由。
不过自由也是有代价的,WebSocket 虽然是在应用层,但使用方式却与“TCP Socket”差不多,过于“原始”,用户必须自己管理连接、缓存、状态,开发上比 HTTP 复杂的多,所以是否要在项目中引入 WebSocket 必须慎重考虑。
先简单总结介绍一下 WebSocket 是什么,其实就是为了解决 HTTP 不能满足实时通信的问题的,与我最开始以为的 “登录认证” 没有关系。
我向你敬礼啊,Respect!