首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Js的长轮询[通俗易懂]

Js的长轮询[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-11-04 08:45:25
发布于 2022-11-04 08:45:25
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

长轮询(Long polling)

长轮询是与服务器保持持久连接的最简单的方式,它不使用任何特定的协议,例如 WebSocket 或者 Server Sent Event。

它很容易实现,在很多场景下也很好用。


常规轮询

从服务器获取新信息的最简单的方式是定期轮询。也就是说,定期向服务器发出请求:“你好,我在这儿,你有关于我的任何信息吗?”例如,每 10 秒一次。

作为响应,服务器首先通知自己,客户端处于在线状态,然后 —— 发送目前为止的消息包。

这可行,但是也有些缺点:

  1. 消息传递的延迟最多为 10 秒(两个请求之间)。
  2. 即使没有消息,服务器也会每隔 10 秒被请求轰炸一次,即使用户切换到其他地方或者处于休眠状态,也是如此。就性能而言,这是一个很大的负担。

因此,如果我们讨论的是一个非常小的服务,那么这种方式可能可行,但总的来说,它需要改进。


长轮询

所谓“长轮询”是轮询服务器的一种更好的方式。

它也很容易实现,并且可以无延迟地传递消息。

其流程为:

  1. 请求发送到服务器。
  2. 服务器在有消息之前不会关闭连接。
  3. 当消息出现时 —— 服务器将对其请求作出响应。
  4. 浏览器立即发出一个新的请求。

对于此方法,浏览器发出一个请求并与服务器之间建立起一个挂起的(pending)连接的情况是标准的。仅在有消息被传递时,才会重新建立连接。

如果连接丢失,可能是因为网络错误,浏览器会立即发送一个新请求。

实现长轮询的客户端 subscribe 函数的示例代码:

代码语言:javascript
代码运行次数:0
运行
复制
async function subscribe() {
  let response = await fetch("/subscribe");

  if (response.status == 502) {
    // 状态 502 是连接超时错误,
    // 连接挂起时间过长时可能会发生,
    // 远程服务器或代理会关闭它
    // 让我们重新连接
    await subscribe();
  } else if (response.status != 200) {
    // 一个 error —— 让我们显示它
    showMessage(response.statusText);
    // 一秒后重新连接
    await new Promise(resolve => setTimeout(resolve, 1000));
    await subscribe();
  } else {
    // 获取并显示消息
    let message = await response.text();
    showMessage(message);
    // 再次调用 subscribe() 以获取下一条消息
    await subscribe();
  }
}

subscribe();

正如你所看到的,subscribe 函数发起了一个 fetch,然后等待响应,处理它,并再次调用自身。

服务器应该可以处理许多挂起的连接

服务器架构必须能够处理许多挂起的连接。

某些服务器架构是每个连接对应一个进程,导致进程数和连接数一样多,而每个进程都会消耗相当多的内存。因此,过多的连接会消耗掉全部内存。

使用像 PHP 和 Ruby 语言编写的后端程序会经常遇到这个问题。

使用 Node.js 编写的服务端程序通常不会出现此类问题。

也就是说,这不是编程语言的问题。大多数现代编程语言,包括 PHP 和 Ruby,都允许实现更适当的后端程序。只是请确保你的服务器架构在同时有很多连接的情况下能够正常工作。


使用场景

在消息很少的情况下,长轮询很有效。

如果消息比较频繁,那么上面描绘的请求-接收(requesting-receiving)消息的图表就会变成锯状状(saw-like)。

每个消息都是一个单独的请求,并带有 header,身份验证开销(authentication overhead)等。

因此,在这种情况下,首选另一种方法,例如:Websocket或 Server Sent Events


转载详情:

转载网站: Javascript.info

转载地址:https://zh.javascript.info/long-polling

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181843.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
ChatGPT 中文调教指南
ChatGPT是由OpenAI 训练的一款大型语言模型,能够和你进行任何领域的对话。
用户10399177
2023/03/28
1.5K2
[ChatGPT]-01-chatgpt可以做什么?如何调教
示例:Java 后端开发工程师、React 前端开发工程师、全栈开发工程师、iOS 开发工程师、Android开发工程师等。 回复截图请看这里
AI拉呱
2023/04/01
1.1K0
ChatGPT提示词保姆级教程
吴恩达联合OpenAI出ChatGPT 提示词教程 课程涵盖从理论到应用的各个方面,包括大型语言模型、文本嵌入、强化学习等技术的应用。 https://learn.deeplearning.ai/
Dlimeng
2024/05/24
4830
ChatGPT提示词保姆级教程
如何有效向Chatgpt提问
在以前我也写了一篇提问的艺术,不过是面对的对象是人。(详见:更好的解决问题方法:提问的艺术)。最近随着chatgpt的火爆,越来越多的人了解和使用chatgpt,也有很多新的人工智能相继问世,如百度的文心一言,华为的盘古,腾讯的混元,阿里的通义千问,讯飞的星火等等。虽然如今ai技术得到飞跃式增长,ai们理解人类自然语言变得更加强大,但是学习如何提问也还是极为重要的。掌握向ai提问的技巧和方法,能够获得准确,有用的回答,有效提高提问效率。
Daimon
2023/08/23
5660
GPT4食用指南
好了,今天的分享暂时到这里,gpt4的食用指南还有很多类别,下篇文章我们继续探讨如何让gpt4充当不同的角色。有什么问题欢迎大家一起和Tom交流和讨论。
Tom2Code
2024/03/20
1950
GPT4食用指南
【技巧】ChatGPT Prompt 提示语大全
Contributed by: StoryChief AI Reference: 7 Powerful ChatGPT Prompts to Create SEO Content Faster 供稿人:StoryChief AI 参考:https://storychief.io/blog/chatgpt-prompts-seo
小锋学长生活大爆炸
2024/04/26
2310
ChatGPT 提示词大师
欢迎来到《ChatGPT 提示大师:精通有效提示指南》!这个详尽的教程将教会你一切关于创建简洁有效的 ChatGPT 提示,激发有趣和教育性对话的知识。
ApacheCN_飞龙
2024/05/24
3640
ChatGPT 提示词大师
测评混元大模型并且基于混元实战开发
halo 我是杨不易呀,在混元大模型内测阶段就已经体验了一番当时打开页面的时候灵感模块让我大吃一惊这么多角色模型真的太屌了,随后我立马进行了代码处理水平和上下文的效果结果一般般但是到如今混元大模型代码处理水平提升超过 20%,代码处理效果在实测中高于ChatGPT 6.34% HumanEval 的公开测试集指标显示,ta已超过Starcoder、Codellama等业界头部开源代码大模型。腾讯混元大模型现在正式全部开发,发起申请即可,在混元大模型内测阶段我就已经在使用接下来我们迎接代码能力全面升级的混元大模型!
杨不易呀
2023/12/30
2.4K40
测评混元大模型并且基于混元实战开发
【技巧】ChatGPT Prompt 提示语大全
Contributed by: StoryChief AI Reference: 7 Powerful ChatGPT Prompts to Create SEO Content Faster 供稿人:StoryChief AI 参考:https://storychief.io/blog/chatgpt-prompts-seo
小锋学长生活大爆炸
2024/05/25
2350
【技巧】ChatGPT Prompt 提示语大全
你应该知道的ChatGPT提示语
ChatGPT 自上线以来,凭借其优异的自然语言理解和输出能力,仅花 5天就成为了活跃用户过百万的现象级产品。而上一个现象级产品 instagram 花了 2 个半月。到目前为止 ChatGPT 在全球累计用户已经过亿,相信现在也有很多人在跟 ChatGPT 聊过之后相信 AI 发展的奇点已经到来。
云原生小白
2023/08/28
4550
你应该知道的ChatGPT提示语
ChatGPT 提示词技巧:制作Ai看得懂清晰有效咒语
当ChatGPT首次推出时,我立即被它的功能所吸引。我以各种方式尝试了该工具,并一直对结果感到惊讶。当我看到其他人找到使用 ChatGPT 的创造性方法并了解更多关于如何优化其潜力的信息时,我受到启发,创建了的有效提示存储库。发现和探索 ChatGPT 的功能,然后与他人分享我的发现,这确实令人兴奋。
轩辕镜像
2024/11/22
1800
ChatGPT 提示词技巧:制作Ai看得懂清晰有效咒语
当你开始用 ChatGPT 时,我已经开始调教自己的 AI 机器人了!
ChatGPT 相关话题最近非常火热,很多人尤其是程序员群体已经开始使用 ChatGPT 或 New Bing 辅助自己解决工作中的问题,甚至开始用他们来写代码了。 但现在使用 ChatGPT 有一点不便的地方,一方面官网免费版经常超时,而且官网暂时不支持机器人,有些任务执行前需要交代相关背景和要求,写的太简略则效果不好,写的太复杂每次粘贴不方便。
明明如月学长
2023/04/30
2.3K0
当你开始用 ChatGPT 时,我已经开始调教自己的 AI 机器人了!
技巧就是效率,ChatGPT调教指北
很多人都知道ChatGPT很火很强,几乎无所不能,但跨越了重重门槛之才有机会使用的时候却有些迷茫,一时间不知道如何使用它。如果你就是把他当作一个普通的智能助手来看待,那与小爱同学有什么区别?甚至还差劲些,因为各大厂商的智能助手起码还知道实时的时间和天气情况,而ChatGPT却一无所知,那么,什么样的使用姿势才是正确且高效的呢?
堆栈哲学
2023/04/01
7560
技巧就是效率,ChatGPT调教指北
ChatGPT应用——充当 Linux 终端
​ 我想让你充当 Linux 终端。我将输入命令,您将回复终端应显示的内容。我希望您只在一个唯一的代码块内回复终端输出,而不是其他任何内容。不要写解释。除非我指示您这样做,否则不要键入命令。当我需要用英语告诉你一些事情时,我会把文字放在中括号内[就像这样]。我的第一个命令是 pwd
用户10399177
2023/03/08
7.3K1
Prompt learning 教学案例篇:文生文案例设定汇总,你可以扮演任意角色进行专业分析
| 1)改进输入:从答案的不足之处着手 |
汀丶人工智能
2023/05/13
6420
【黄啊码】上百个AI提示词模板,不用多想,直接收藏【三】
Generate a list of 10 frequently asked questions based on the following content: [内容]
黄啊码
2024/08/09
4190
【黄啊码】上百个AI提示词模板,不用多想,直接收藏【二】
作为一名中文写作改进助理,你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性,同时分解长句,减少重复,并提供改进建议。请只提供文本的更正版本,避免包括解释。请从编辑以下文本开始:[文章内容]
黄啊码
2024/07/23
2360
【黄啊码】上百个AI提示词模板,不用多想,直接收藏【二】
【黄啊码】上百个AI提示词模板,不用多想,直接收藏【四】
我希望你能作为一名历史学家行事。你将研究和分析过去的文化、经济、政治和社会事件,从原始资料中收集数据,并利用它来发展关于各个历史时期发生的理论。
黄啊码
2024/08/09
3330
《花雕学AI》36:探索Aski AI——集成问答、写作和绘画功能的强大AI平台
引言:人工智能是当今时代的最热门和最有前途的技术之一,它可以帮助人类解决各种复杂和有趣的问题,提高生活和工作的效率和质量。然而,人工智能的应用还面临着许多挑战和局限,比如数据的稀缺和质量、算法的复杂性和可解释性、用户的需求和偏好等。为了克服这些难题,微软开发了一个集成问答、写作和绘画功能的强大AI平台——Aski AI(链接:https://aski.ai/i/Ga4320a1)。Aski AI可以根据用户的自然语言输入,提供最优的解决方案,无论是查询知识、创作内容,还是绘制图像。Aski AI不仅拥有高度的智能和创造力,还具有友好和有趣的个性,可以与用户建立良好的互动和信任。本文将探索Aski的三大功能和优势,让你感受Aski AI带来的惊喜和乐趣。
驴友花雕
2023/05/26
3820
《花雕学AI》36:探索Aski AI——集成问答、写作和绘画功能的强大AI平台
使用 ChatGPT 的 7 个技巧 | Prompt Engineering 学习笔记
前段时间在 DeepLearning 学了一门 Prompt 的课程,吴恩达本人授课,讲的通俗易懂,感觉受益匪浅,因此在这里总结分享一下我的学习笔记。
phoenix.xiao
2023/08/28
6640
使用 ChatGPT 的 7 个技巧 | Prompt Engineering 学习笔记
相关推荐
ChatGPT 中文调教指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验