首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >SSE >SSE与长轮询(Long Polling)相比有什么优势?

SSE与长轮询(Long Polling)相比有什么优势?

词条归属:SSE

1. 实时性差异

SSE 在服务器有新数据时立即推送,延迟通常仅为网络RTT(往返时间)级别(几毫秒到几十毫秒)。长轮询虽然也将服务器响应保持打开一段时间,但每次消息推送完成后客户端仍需重新发起请求,引入了额外的请求建立延迟;且如果服务器端在保持期间没有新数据,请求会因超时返回空响应,进一步增加消息传递延迟。

2. 服务器资源消耗差异

SSE 为每个客户端维持一个长期HTTP连接,连接建立后的每次消息推送仅需写入响应体,开销极小。长轮询则需要为每个客户端周期性地建立HTTP连接、执行服务端处理逻辑、返回响应、然后关闭连接,在高并发场景下会显著增加服务器CPU和数据库连接池的压力。对于消息频率较低的应用,长轮询的部分请求会空等超时,造成资源浪费。

3. 客户端实现复杂度差异

SSE 的客户端实现极为简单:创建一个EventSource 对象,注册onmessage或addEventListener回调即可,浏览器自动处理重连、Last-Event-ID续传等复杂逻辑。长轮询的客户端则需要自行实现:发起AJAX请求、处理响应、立即或等待一小段时间后再次发起请求、处理请求失败和超时、实现退避重连策略等,代码复杂度明显更高。

4. 网络友好性差异

SSE 复用单一HTTP长连接,减少了TCP握手、SSL握手的频次,对网络基础设施更友好。长轮询频繁建立短连接,在HTTPS场景下每次连接都需进行TLS握手(虽然TLS 1.3已大幅优化,但仍有开销),在高延迟移动网络下性能差距更为明显。但长轮询的优势在于兼容性极佳,可穿透所有HTTP代理和防火墙,适合对网络环境兼容性要求极高的场景。

相关文章
为什么Netty这么火?与Mina相比有什么优势?
Netty是什么?为什么这么火? Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 相比JDK原生NIO,Netty提供了相对十分简单易用的API,非常适合网络编程。Netty是完全基于NIO实现的,所以Netty是异步的。 作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获
Java技术栈
2018-03-30
4.8K0
开源XL-LightHouse与Flink、ClickHouse之类技术相比有什么优势
Flink是一款非常优秀的流式计算框架,而ClickHouse是一款非常优秀的OLAP类引擎,它们是各自所处领域的佼佼者,这一点是毋庸置疑的。Flink除了各种流式计算场景外也必然可以用于流式统计,ClickHouse同样也可以用于流式统计,但我不认为它们是优秀的流式统计工具。XL-Lighthouse在流式统计这个细分场景内足以完胜Flink和ClickHouse。在企业数据化运营领域,面对繁杂的流式数据统计需求,以Flink和ClickHouse以及很多同类技术方案为核心的架构设计不能算是一种较为优秀的解决方案。
用户2468294
2023-08-16
9190
Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE
1996年IETF  HTTP工作组发布了HTTP协议的1.0版本 ,到现在普遍使用的版本1.1,HTTP协议经历了17 年的发展。这种分布式、无状态、基于TCP的请求/响应式、在互联网盛行的今天得到广泛应用的协议,相对于互联网的迅猛发展,它似乎进步地很慢。互联网从兴起到现在,经历了门户网站盛行的web1.0时代,而后随着ajax技术的出现,发展为web应用盛行的web2.0时代,如今又朝着web3.0的方向迈进。反观http协议,从版本1.0发展到1.1,除了默认长连接之外就是缓存处理、带宽优化和安全性等方面的不痛不痒的改进。它一直保留着无状态、请求/响应模式,似乎从来没意识到这应该有所改变。
JackJiang
2018-08-23
3.4K0
一文讲透,低代码是什么?与传统开发相比有什么优势?
传统的软件开发模式已跟不上时代发展的步伐,在数字化转型的浪潮中,低代码开发成为了企业加速创新、提高效率的热门话题。但对于许多非技术背景的决策者而言,低代码仍是一个相对陌生的概念。本文将为您介绍低代码的含义和特点,并对比传统开发方式,揭示其开发的优势所在。
Zoho 低代码开发工具
2024-05-31
8100
服务器端实时推送技术之SSE
在讲Server-Sent Events (SSE) 之前,我们先来看看 HTTP 请求- 响应。一个标准的 HTTP 请求- 响应,需要客户端打开一个连接,将一个 HTTP 请求(如 HTTP GET 请求)发送到服务端,然后接收到 HTTP 回来的响应,如果该响应被完全发送或者接收,服务端就会把连接关闭。通常是由某个客户发起,客户端才会需要请求所有数据。
kinbug [进阶者]
2020-06-27
4.4K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券