WebSocket协议---简单介绍,协议特点及引用场景

简介

  • WebSocket协议允许客户端(如浏览器)与服务器之间进行双向通信。
  • 该协议使用基于源的安全模型,通常由Web浏览器使用。
  • 协议包括一个初始握手过程和基本的消息框架,建立在TCP之上。

概述

协议特点

WebSocket 基于 TCP 协议,实现了双向数据传输。这意味着服务器和客户端能够随时向对方发送数据,不再受限于传统的请求-响应模式。同时,它支持多种数据格式,如文本、二进制等,为不同类型的数据传输提供了便利。

生命周期

连接建立

客户端向服务器发送握手请求,服务器响应后,WebSocket 连接建立。这一过程通常涉及 HTTP 协议的升级操作。

连接开放

连接建立成功后,双方可以自由地进行数据交换。在此阶段,数据能够实时传输,保证了通信的高效性。

连接关闭

当一方决定关闭连接时,会发送关闭帧通知对方。关闭的原因可能多种多样,如应用程序的需求、网络故障等。

连接关闭完成

双方完成所有的关闭操作,资源被释放,连接彻底终止。
及时处理连接关闭事件至关重要,它有助于释放相关资源,避免内存泄漏和其他潜在问题。同时,能够及时通知应用程序进行必要的清理和后续处理,保证系统的稳定性和可靠性。

消息格式

  • WebSocket 的消息由消息头和消息体组成。
  • FIN 标志位用于指示当前帧是否为消息的最后一帧。
  • Opcode 决定了如何解析后续的数据载荷部分,不同的操作码对应不同的帧类型,如文本帧、二进制帧、关闭帧等。
  • Payload length 表示有效载荷的长度,通过不同的模式来表示不同长度范围的载荷。

与TCP和HTTP的关系

  • WebSocket协议是一个独立的TCP协议,其握手过程被HTTP服务器解释为Upgrade请求。

HTTP 协议简述

HTTP 协议是基于请求-响应模式的通信协议。在请求过程中,客户端向服务器发送请求,服务器接收并处理请求后返回响应。这一过程存在一些明显的问题。

  • 首先,HTTP 是串行的,一次只能处理一个请求,无法同时处理多个请求,这在处理大量并发请求时效率较低。
  • 其次,HTTP 是单向的,只能由客户端发起请求,服务器被动响应,限制了数据的实时交互。
  • 再者,HTTP 是无状态的,服务器无法记住之前与客户端的交互状态,每次请求都需要重新传递相关信息。

WebSocket 对 HTTP 的改进

WebSocket 在多个方面对 HTTP 进行了优化和改进。

  • 在实时通信方面,WebSocket 建立的持久连接使得服务器能够主动向客户端推送数据,实现了真正的实时交互,这与 HTTP 中客户端需频繁请求以获取最新数据的方式截然不同。例如,在实时股票行情展示中,WebSocket 能确保数据的即时更新,而 HTTP 则可能存在延迟。
  • 在减少请求次数方面,WebSocket 一次连接建立后即可持续通信,无需像 HTTP 那样为每次数据获取都发起新的请求,大大降低了请求的次数和频率。以在线聊天应用为例,使用 HTTP 可能导致大量的请求以获取新消息,而 WebSocket 则能在连接建立后持续接收新消息,减少了不必要的请求开销。
  • 此外,WebSocket 支持双向通信,客户端和服务器可以随时相互发送数据,突破了 HTTP 中客户端发起请求、服务器响应的限制,为更灵活和高效的通信提供了可能

websocket 应用场景

在线游戏

在多人在线游戏中,WebSocket 能够实现玩家之间的实时互动。

实时聊天

无论是社交媒体平台的私信交流,还是企业内部的即时通讯工具,WebSocket 都能保证消息的即时传递。用户发送的消息能够瞬间送达对方,不会出现明显的延迟,提供了流畅的聊天体验。

小结

这篇写了websocket的大概内容,协议特点,生命周期,还有websocket和tcp,http的关系,顺便简单介绍了下http协议;还有websocket的应用场景。通过这篇,了解了websocket协议的内容。感兴趣,可以一起来学习学习。OK,结束。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值