HTTP,WebSocket 和 聊天室

本文深入探讨了WebSocket协议,对比了HTTP的全双工与半双工特性,介绍了WebSocket的建立过程及其与HTTP的关系。文章还讨论了WebSocket在即时通讯场景中的应用,包括其在聊天室中的实现,并提及了Server-Sent Events和HTTP/2 Server Push作为替代方案的优缺点。
摘要由CSDN通过智能技术生成

前言

在涉及到网络层面的相关内容时,不免会联系到 HTTP、TCP、WebSocket 等,但相信大部分人都并不是很清楚其中的一些关系和概念,特别是需要你去做语言表述时,网上有不少优秀的资料和文章,但知识仍需要自己去消化和总结,于是有了本文!!!

本文的核心内容就是 WebSocket,主要从以下几个方面来进行介绍和实践:

  • 是什么 WebSocketwhat
  • 为什么需要 WebSocketwhy
  • WebSocketHTTP 的关系
  • WebSocket 的使用场景 (when / where
  • WebSocket 实现简易聊天室(how

吾乃 WebSocket

为了更好的解释 WebSocket 是什么,就需要一个熟悉且常用的东西来作为对比参考,它就是 HTTP。

HTTP

在大多数项目都会使用 HTTP 协议来实现前后端交互,而 HTTP 协议又是基于 TCP 协议来建立连接的,它们的关系是大致如下:

全双工 & 半双工

所谓 全双工 指的是发送端和接收端是可以 随时(包含同一时刻) 向对方发送消息进行通信,而 半双工 指的是发送端和接收端是也可以向对方发送消息进行通信,但是 同一时刻 只能有一方进行发送动作。

我们常用 HTTP1.1 协议就属于 半双工,即服务端不具备主动推送数据资源给客户端的能力,当服务端需要推送数据给客户端时,必须要客户端先发起一个请求,这也被称为 请求-响应 模型。

长轮询 & 服务端推送

由于 HTTP1.1 协议并不支持服务端主动向客户端发送数据消息,但实际需求又有需要实现这样的功能,比如扫码登录:

基于 请求-响应 模型如果我们需要服务端的消息数据,就必须先向服务端发送对应的查询请求,因此只要每隔一段时间向服务器发起查询请求,在根据响应结果决定是继续下一步操作,还是继续发起查询。

但这个查询请求是需要设定时间间隔,而时间间隔可结合 HTTP 请求超时时间来得出,毕竟如果一直发送查询请求,就会得到很多无意义的查询请求和响应结果。

上述在用户无感知下实现 服务端推送 功能的方案,其实就是所谓的 长轮询

WebSocket

HTTP & 超文本

前面我们知道了 HTTP1.1 是 半双工,而 HTTP 是基于 TCP 的,然后 TCP 是 全双工 的,也就是说 HTTP1.1 中根本没用到 TCP 的 全双工 的能力,这是为啥?

早期 HTTP(超文本传输协议) 主要目的就是传输超文本,因为当时网络上绝大多数的资源都是纯文本,许多通信协议也都使用纯文本,因此 HTTP 在设计上不可避免地受到了时代的限制。

基于 TCP 的新协议

由于 HTTP 存在早期设计上的限制,因此需要一种新的基于 TCP 实现 全双工通信 的协议,而这个协议就是 WebSocket

WebSocket 其中的 Socket 其实并不是一个协议,它是为了方便使用 TCP 或 UDP 而抽象出来的一层,是位

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值