有了HTTP为什么还要Websocket?一文带你解密Websocket协议
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
我们的外卖、打车、购物等都离不开HTTP或者Websocket等通信协议的实现。作为开发、SRE,在构建和维护应用程序时,应该使用哪种通信协议? 或者面试官问你:websocket与http有什么区别?什么时候需要使用websocket?你又当如何作答呢,跟我一起盘一盘呗!! Websocket是什么?WebSocket是一种网络通信协议,它采用长连接的方式,提供了在单个TCP连接上进行全双工通信的方式。与HTTP协议服务端只能被动响应的方式不同,websocket是支持主动从服务端推送数据给客户端。所以常用于IM聊天,在线游戏,通知等场景 Websocket连接WebSocket 协议会在客户端与服务端之间建立全双工通道,客户端和服务器都可以通过长连接同时发送和接收数据。这种通信方式比 HTTP 轮询具有更少的开销 因为连接的双方可以随时发送消息,所以在需要快速传输大量数据时,WebSocket 连接是一个很好的选择。 比如在一个简单的聊天室中连接多个客户端。一个 WebSocket 服务器负责管理他们的会话,一个客户端向服务器发送一条消息,服务器立即将其转发给所有其他连接的客户端。对于用户而言,他们可以实时地相互发送消息。如下图: WebSocket 连接的优点双向通讯由于连接双方都可以随时发送消息,因此当您需要快速来回移动大量数据时,或者需要从服务端控制客户端设备时(比如IOT终端控制),WebSocket 连接是一个绝佳的选择。 更低的延迟HTTP 连接中相对高频数据获取的常见模式是轮询,其中客户端定期请求新的服务器数据。也许这种通信方法的最大缺点是延迟。websocket基于双工长连接的方式,不需要等待或者去服务端查询状态,服务端处理完成之后,可以主动发送内容到客户端。 通过 WebSocket 连接,数据一旦可用就会立即会传给客户端。客户不需要一直请求它。通信延迟大大降低。 持久连接websocket建立全双工连接之后,不出问题的情况下,就会持续保持。并且Websocket连接是可以有状态的。对于传统的 HTTP 连接,客户端发出请求,服务器发送响应后,连接将关闭。如果客户端需要更多数据,他们必须打开一个新连接。当然在HTTP/1.1引入了Keepalive的机制,来保持TCP连接,不过一般在处理一定数量的http请求之后,连接依然会被关闭,HTTP/2之后采用了长连接的方式,并支持服务端推送能力,在这两个方面是同websocket类似的。 Websocket建立连接的过程从上图就可以看出,Websocket连接的建立是依赖于HTTP协议的。下边给大家一个简单的实例: 客户端发起websocket连接
看过我分享http协议的同学,就可以发现,这个分明就是一个http请求嘛。但是多了几个东西
这两个头就是websocket的核心,告诉http服务器,我发起的是websocket协议,别把我当http协议处理了
Sec-WebSocket-Key是一个base64编码的值,是客户端随机生成的,是用来验证websocket服务端 Sec-WebSocket-Protocol是用户自定义的协议标识,用来区分在同URL下,不同的服务,具体对应什么功能由业务自己实现。目的是告诉服务端,今晚我要翻菀贵人,不是什么安小主,别搞错了 最后Sec-WebSocket-Version是告诉服务器自己使用的websocket版本 如果服务端支持websocket协议,并接受了客户端的要求,就会返回下边的响应。还记得http1xx状态码?翻翻我前几篇文章吧
这就告诉客户端即将升级到websocket协议,Sec-WebSocket-Accept 表示服务端确认,后边的随机字符串是对Sec-WebSocket-Key的加密,目的就是告诉客户端,我知道啦,这是我的身份证,你查查是莞贵人没错吧。Sec-WebSocket-Protocol则是最终使用的协议。 到此,HTTP协议的使命,就已经完成了。后续的所有操作都是基于Websocket协议了。 Websocket与HTTP协议的对比使用场景对比HTTPHTTP是一种应用层协议,最初设计用于在客户端和服务器之间传输超文本。它是一种无状态的协议,每个请求都是独立的,不保留前一次请求的状态信息。HTTP 通常用于传输网页、图片、文本等静态资源,以及通过 RESTful API 进行数据传输。 WebSocketWebSocket 是一种全双工通信协议,建立在单个 TCP 连接上,允许在客户端和服务器之间进行双向通信。WebSocket 的设计旨在解决 HTTP 协议在实时性和交互性方面的不足。它广泛应用于实时聊天、在线游戏、金融行业的实时数据更新等场景。 协议对比HTTP
WebSocket
连接方式对比HTTP
WebSocket
通信性质对比HTTP
WebSocket
性能对比HTTP
WebSocket
协议头对比HTTP
WebSocket
安全性对比HTTP
WebSocket
状态及缓存HTTP
Websocket
WebSocket与HTTP:选择合适的协议在选择 WebSocket 或 HTTP 协议之前,请考虑一下您正在构建的内容以及原因。请注意,每种通信协议在其他协议通常不足的几个领域都表现出色。 WebSocket 与 HTTP 连接之间的技术权衡了解这两种通信协议之间的技术权衡可以让您深入了解哪一种最适合您的项目。 连接设置和管理
对于 WebSocket,持久连接是通过客户端和服务器之间的握手建立的。即使消息之间存在明显的延迟,它也会在会话期间保持打开状态。 对于 HTTP,连接是通过握手建立的,然后用于Request-Response。HTTP/1.1 允许将同一个 TCP/IP 连接重复用于多个请求-响应对,从而减少开销并改善延迟,但程度与 WebSocket 不同。连接仍将在相对较短的时间内关闭,从几秒到几分钟不等。 数据传输和编码
WebSocket 连接使用全双工双向通信 - 连接的任何一方都可以随时发送消息。HTTP 连接使用半双工通信;一次只有一方可以通信,服务器的消息始终响应客户端的请求。如果您需要从服务端主动发消息给客户端,那websocket就最合适不过。 WebSocket 和 HTTP 都可以发送以基于文本的格式(例如 JSON、XML 和纯文本)编码的数据,以及二进制编码的数据。 错误处理和恢复
WebSocket 连接可能会因各种原因而失败,包括应用程序代码中的错误。客户端会收到一个错误事件,他们可以Watch该事件,并且您可以按照自己认为合适的方式处理监听到的错误。 当然,HTTP 连接可能会遇到类似的情况,但某些常见架构可以在错误处理方面提供优势。 HTTP 指定了服务器可以响应的一系列状态代码,以大致指示请求是否成功。4xx 和 5xx 范围分别是为客户端和服务器错误保留的。 可扩展性
WebSocket 连接被设计的简单高效,是事件驱动的——仅当有需要发送消息的内容时才会发送消息。 HTTP 连接可以通过长轮询实现类似于实时功能的功能,随着请求增长,处理所有这些长期 HTTP 请求的开销会不断增加。 在HTTP/2中使用HTTP Stream,连接可以始终保持打开状态来传输数据流,这在概念上类似于 WebSocket,但它的push主要是基于已有的请求和可能的需求而被动触发的。 WebSocket 与 HTTP 连接的性能注意事项
得益于持久连接,WebSocket 可以减少开销和延迟。这会带来更好的性能、更快的实时更新以及更少的处理能力。 由于 HTTP 通常必须在会话的生命周期内处理多个连接,因此与 WebSocket 相比,它自然会花费更多的时间和资源。 WebSocket 与 HTTP 连接的安全性
WebSocket 和 HTTP 连接在安全考虑方面类似。websocket的WS与HTTP都会受到如跨站脚本的攻击。通过TLS的加持,WSS与HTTPS都可以实现加密通信,这两种协议都足够安全。 通信协议的混合方法通常,建议的方法是在您的系统中同时支持这两种协议,以发挥其最擅长的作用。这意味着对大多数标准网络流量使用 HTTP 连接,对任何需要实时通信的内容使用 WebSocket 连接,例如通知、IM通话、IOT控制等。 当然,你还可以考虑评估补充或替代技术;毕竟,WebSocket 和 HTTP 并不是实时通信的唯一选择。 WebRTC来实现音视频通话服务,MQTT来实现IOT设备控制等等。 总结您现在应该对如何使用 WebSocket 和 HTTP 通信协议有了一定的了解,明确了他们的优点和缺点,并且可以根据自己的需求在二者之间进行权衡。当然,你也可以依此应对各个公司关于HTTP协议,与websocket协议的考题了,祝您一切顺遂。 该文章在 2024/10/24 9:19:37 编辑过 |
关键字查询
相关文章
正在查询... |