
从long polling 到 websockets
发布日期:2021-05-08 04:53:36
浏览次数:26
分类:精选文章
本文共 676 字,大约阅读时间需要 2 分钟。
在实时显示数据的Web程序中,客户端获取数据的方式经历了从“不断请求”到“长轮询”再到WebSockets的演变。这几种方法各有优劣,适用于不同的场景。
最初的做法是客户端浏览器使用setInterval
或setTimeout
不断通过Ajax请求后端获取数据。这种方法虽然简单,但存在两个主要缺陷:首先,如果在定时器指定的时间内服务端未返回数据,那么对应的请求会丢失数据;其次,不同的Ajax请求可能不会按照请求顺序返回数据。
为了解决上述问题,开发者采用了递归setTimeout
的方式。这种方法通过不断递归定时器,确保每次请求都能按时发送,并且能处理服务端返回数据的顺序问题。然而,这种方法在带宽使用上仍然非常高效,适合网络环境较差的情况。
随后,长轮询(Long Polling)方法被引入。长轮询的核心思想是服务端不再立即返回客户端的请求,而是等到有数据时才返回。这种方式通过减少不必要的请求次数,充分利用了每一次客户端请求,从而降低了带宽消耗。具体实现方法是通过在定时器中检查请求的有效性,并根据服务端返回的数据决定是否发送给客户端。
最终,WebSocket的引入进一步优化了数据推送的过程。WebSocket允许服务端主动向客户端推送数据,消除了轮询的不确定性。这种方法不仅提高了数据传输的效率,还减少了客户端的资源消耗。对于需要实时更新的应用场景,WebSocket是最佳选择。
总体而言,选择哪种方法取决于具体的应用场景和网络环境。长轮询适合带宽有限但数据更新频率较低的场景,而WebSocket则更适合需要高频率实时数据推送的应用。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月06日 21时00分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Hmz 的女装(递推)
2019-03-06
HDU5589:Tree(莫队+01字典树)
2019-03-06
不停机替换线上代码? 你没听错,Arthas它能做到
2019-03-06
sharding-jdbc 分库分表的 4种分片策略,还蛮简单的
2019-03-06
分库分表的 9种分布式主键ID 生成方案,挺全乎的
2019-03-06
MySQL不会丢失数据的秘密,就藏在它的 7种日志里
2019-03-06
Python开发之序列化与反序列化:pickle、json模块使用详解
2019-03-06
回顾-生成 vs 判别模型-和图
2019-03-06
采坑 - 字符串的 "" 与 pd.isnull()
2019-03-06
无序列表 - 链表
2019-03-06
SQL 查询强化 - 数据准备
2019-03-06
SQL 强化练习 (四)
2019-03-06
SQL 强化练习 (八)
2019-03-06
Excel 拼接为 SQL 并打包 exe
2019-03-06
Pandas数据分析从放弃到入门
2019-03-06
Matplotlib绘制漫威英雄战力图,带你飞起来!
2019-03-06
机器学习是什么
2019-03-06
《小王子》里一些后知后觉的道理
2019-03-06
《自私的基因》总结
2019-03-06