系统设计基础 长轮询、WebSocket、服务器发送事件(SSEs)协议(1)

我的面试宝典:一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

image

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

image

还有源码相关的阅读学习

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  1. 服务器计算响应并将其发送回,就像常规HTTP流量一样。

  2. 客户端定期重复上述三个步骤,以从服务器获取更新。

轮询的问题在于客户端必须不断向服务器询问任何新数据。会照成许多空响应,从而造成HTTP开销。

HTTP长轮询协议


这是传统轮询技术的一种变体,该技术允许服务器在数据可用时将信息推送到客户端。使用Long-Polling,客户端可以像正常轮询一样从服务器请求信息,但是服务器可能不会立即响应。这就是为什么这种技术有时被称为“挂起请求”的原因。

  • 如果服务器没有可供客户端使用的任何数据,则服务器将保留请求并等待直到某些数据可用为止,而不是发送空响应。

  • 一旦数据可用,完整的响应将发送到客户端。然后,客户端立即从服务器重新请求信息,以便服务器几乎始终具有可用的等待请求,服务器可以使用该请求来响应事件。

使用HTTP Long-Polling的应用程序的基本生命周期如下:

  1. 客户端使用常规HTTP发出初始请求,然后等待响应。

  2. 服务器延迟其响应,直到有可用的更新发生超时为止

  3. 当有可用更新时,服务器会将完整的响应发送到客户端。

  4. 客户端通常会在收到响应后立即发送新的长轮询请求,或者在允许的等待时间的暂停后发送新的长轮询请求。

  5. 每个长轮询请求都有一个超时。由于超时而关闭连接后,客户端必须定期重新连接。

WebSockets协议


WebSocket提供全双工单个TCP连接上的通信通道。它提供了客户端和服务器之间的持久连接,双方都可以使用该连接随时开始发送数据。客户端通过称为WebSocket握手的过程建立WebSocket连接。如果该过程成功,则服务器和客户端可以随时在两个方向上交换数据。WebSocket协议使客户端和服务器之间的通信具有较低的开销,从而促进了与服务器之间的实时数据传输。通过提供一种标准化的方法,使服务器无需客户端询问即可将内容发送到浏览器,并允许消息在保持连接打开的情况下来回传递。

服务器发送事件协议(SSEs)


在SSEs下,客户端与服务器建立持久的长期连接。服务器使用此连接将数据发送到客户端。如果客户端要向服务器发送数据,则需要使用另一种技术/协议。

  1. 客户端使用常规HTTP向服务器请求数据。

  2. 所请求的网页将打开与服务器的连接。

  3. 只要有新信息可用,服务器就会将数据发送到客户端。

当我们需要从服务器到客户端的实时流量,或者服务器正在循环生成数据并将向客户端发送多个事件时,SSEs最好。

总结


常见的前后端消息通信协议如下:

  • 传统的轮询协议

  • Http长轮询协议

  • WebSockets协议

  • SSEs协议

SSEs协议剖析

其中除了SSEs协议,其他方法大家都很熟悉了,再来看看SSEs到底是个啥?

SSE,即 Server-Sent Events,又叫 EventSource,是一种已被写入 HTML 5 标准的服务端事件推送技术,它允许客户端和服务端之间建立一个单向通道,以让服务端向客户端单方向持续推送事件消息,SSE 适用于不需要从客户端发送数据,但要通过某些服务器操作进行更新的场景,例如股票行情、共享设施更新、好友状态更新等。

上面已经简介过其大致流程了,简单说,所谓SSE,就是浏览器向服务器发送一个HTTP请求,然后服务器不断单向地向浏览器推送“信息”(message)。这种信息在格式上很简单,就是“信息”加上前缀“data: ”,然后以“\n\n”结尾。

SSE与WebSocket有相似功能,都是用来建立浏览器与服务器之间的通信渠道。

两者的对比如下

| SSE | Websocket |

| — | — |

| http 协议,可以直接运行于现有的代理服务器和认证技术 | 独立的 websocket 协议,需要服务器端支持 |

| SSE是单向通道,只能服务器向浏览器端发送。 | 全双工通道,可以双向通信,功能更强 |

| 轻量级,实现简单 | 实现相对复杂 |

| 默认支持断线重连 | 需要自己实现断线重连 |

| 文本传输 | 二进制传输 |

| 支持自定义发送的消息类型 | - |

客户端DEMO

最后

做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。

更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

]

[外链图片转存中…(img-kPxyvWBv-1715700567674)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值