浅浅的聊一下 WebSocket

浅浅的聊一下 WebSocket

第一次看到 ws://wss:// 时候,感觉好高级啊,还有这种协议。

Websocket 历史

WebSocket是在2008年6月诞生的1。经由IEFT标准化后,2009年chrome 4第一个提供了该标准支持,并默认启用。于2011年由IEFT标准化为RFC 6455。

现在的浏览器均已支持该标准。

Websocket 出现的背景

思考一下我们经常遇到的一种需求场景,要求在某个网页下,网页的内容可以实时更新。

这种情况下,最大众化的方式就是轮询接口了,即通过定时器,定时请求接口,获取到最新的信息后,将内容更新到页面中,如下:

setInterval(() => {queryAPI().then(() => update());
}, 1000);

但是我们知道,这种定时器的延时并不是很精确,而且加上接口的请求时延,实际时间可能不止代码中所预先设定的时间长度,所以这种实时更新是伪实时更新。

除此之外,还有一点可能会经常遇到,即,我们更新信息并总是要更新整个页面上所有可以看到的信息,我们更关注一些经常变化的信息,比如状态,状态的信息可能大小只有几个字节,但是我们轮询接口拿到的信息却是这个页面的所有信息,大小自然不只几个字节,但是除状态以外的信息都可以视作是冗余的。

状态

我们实际只需要一个字段,而且即使后端提供只返回状态的接口,但实际在一个请求中还要计算ip报文头的大小,依旧是很占用带宽的。

轮询这种解决方案目前依旧是非常流行,最新的轮询技术是Comet,这种技术虽然可以实现双向通信,但仍然需要反复发出请求。而且在Comet中普遍采用的HTTP长连接也会消耗服务器资源2。

Websocket通信模式

了解网络的都知道,数据传输分为单工、半双工、全双工三种工作模式。

Websocket是基于TCP的,使用全双工通信模式的协议,他使得客户端和服务端之间的数据交换变得更简单。而且,作为一个工作在全双工模式下的协议,服务端可以在建立连接后随时向客户端推送消息。

由于协议是基于TCP的,所以websocket也是需要建连和关闭连接的,但要注意的是,一般在websocket的握手通常指的是:客户端发送一个http请求到服务端,服务端响应后标志这个链接建立起来。而不是指tcp的三次握手。

另外在RFC 6455 1.1节「Background」中介绍:WebSocket通过HTTP端口的80和443进行工作,并支持HTTP代理和中介。

原文:it is designed to work over HTTP ports 80 and 443 as well as to support HTTP proxies and intermediaries

为了实现和HTTP的兼容性,WebSocket握手使用HTTP的Upgrade头将HTTP协议转换成Websocket协议。

作为一种协议,websocket自然也是有其用于协议控制的头部信息的,但是相对于HTTP请求每次都要带上完整的头部信息,传输数据时,websocket数据包的头部信息就相对较小,从而降低了控制开销。

相对于前文所提到的轮询接口,websocket可以做到服务端直接向客户端传输数据,省去了客户端发起请求的步骤,同时没有间隔时间,只要服务端内容变化,就可以告知客户端,实时性上有了很大的提高。

Websocket 使用

WebSocket使用十分简单,只需要关注以下API:

  1. WebSocket(url[, protocol]) 构造函数

使用 new WebSocket(xxx) 创建对象时,会同时建立与服务器的连接

ws

  1. WebSocket.onopen , WebSocket.onclose

分别对应连接成功、失败时的回调,这里可以做一些初始化、销毁的工作

  1. WebSocket.onmessage

实际处理数据是用的该函数

在数据处理完成后,需要移除回调函数,不然可能会影响到其他地方的处理

const ws = new WebSocket('ws://sdf.com');
function handleData(evt) {// handle server data.
}
ws.onmessage = handleData;
ws.addEventListener('message', handleData);
  1. WebSocket.send

主动向服务端发送消息,可以通过send和onmessage进行数据互动,如:

ws.send('list');
​
ws.onmessage = evt => {const data = evt.data;if (data === 'hello') {console.log('world');return ;}try {const obj = JSON.parse(data);switch (obj.type) {case 'list':// do something.}} catch (ex) {}
}
  1. WebSocket.close

关闭连接

Node服务端的实现,这个就参考相关的库吧,比较复杂。

衍生知识

http协议至今,主要经历了三个版本。

  • http1.0 短连接,单工通信

    • http/1.0默认的模型是短连接,每个HTTP请求都由他自己独立完成,下图左1,可以看到每一个http请求都对应了一个建立连接关闭连接的阶段,每一个请求都有TCP握手和挥手的阶段。
    • 在这个模型下,想要做到实时更新页面数据,只能考虑轮询。
  • http1.1 支持长链接,半双工通信

    • 1.0之后的版本,1.1会让某个连接保持一定的时间,在这段时间里重复发送一系列请求(下图左2),就是保活。
  • http2.0 支持多路复用,全双工通信

Compares the performance of the three HTTP/1.x connection models: short-lived connections, persistent connections, and HTTP pipelining.

参考文献

[1] [whatwg] TCPConnection feedback

[2] wiki

[3] RFC 6455

[4] Websocket教程

[5] HTTP1.x连接管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28422.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中关村科金张杰:ChatGPT火爆背后,对话式AI在企业服务场景面临三大挑战|MEET2023...

梦晨 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT火爆,也让更多人看到对话式AI的商业价值。 根据艾瑞咨询发布的《2022年中国对话式AI行业发展白皮书》,2021年对话式AI的市场规模为45亿元,带动规模126亿元。 在MEET2023智能未来大会上&#x…

可怕的人工智能ChatGPT

闲来无事想看看ChatGPT作诗的水平如何,于是让ChatGPT模仿苏轼写一首古诗,第一首如下: 读完这首诗,我差点把剩下的几根头发薅下来 接下来抱着试试看的态度给ChatGPT说一下稍微具体点的要求: 唉,古诗的规则…

python统计三国演义中人物出现的频次

方式一. 简化版 安装jieba库/numpy库编程读取《三国演义》电子书,输出出场次数最高的10个人物名字 代码注释: import numpy import jieba# numpy输出有省略号的问题,无法显示全部数据 numpy.set_printoptions(thresholdnumpy.inf)def readF…

对行业大模型的思考

深度学习自然语言处理 分享知乎:黄文灏职位:北京智源AI研究院技术负责人 看到了 Naiyan Wang[1] 和 刘聪NLP[2] 的两篇文章,都提到了对行业大模型的一些看法,有很多相同的想法。正好身边有很多人在讨论行业大模型,想要…

浅谈爆火的AIGC会不会是下一个元宇宙?

OpenAI终于发布了ChatGPT安全方法,这距离意大利政府公开宣布全面禁止ChatGPT还不到一周。 ChatGPT对隐私规则的侵犯和版权问题的触及,伴随一季度迅速在全球范围内的爆火而出现。 紧随意大利的是,德国、日本、法国、加拿大和美国&#xff0c…

斯坦福大学AI课程;创始人剽窃丑闻后 Stability AI 两名高管离职,公司前景存疑

🦉 AI新闻 🚀 Windows Copilot:微软的智能AI助手助力Windows操作系统革命 摘要:微软发布了Windows Copilot的开发者预览版更新。Windows Copilot是微软最新推出的智能助手,通过它用户可以无门槛地使用Windows的各种功…

入职仅1年,谷歌高管不满开发方向后离职!网友:“雪上加霜,谷歌AR业务要凉凉?”...

整理 | 朱珂欣 出品 | CSDN程序人生(ID:coder_life) 过去数月,谷歌的 AR 业务可谓是「动荡不安」—— 裁员、改组、 AR/VR 主管 Clay Bavor 离职。 昨天,谷歌人事变动再起, AR 操作系统团队负责人 Mark …

2023 年 4 月很火的网站

最近chatgpt持续火热,基于chatgpt的网站/工具越来越多,今天分享几个很火的网站,之前分享过的上百个实用网站同步到我的博客了 https://sushengbuhuo.github.io/blog chatdoc 一个基于 ChatGPT 的文档阅读助手http://www.chatdoc.com &#x…

现场拔网线!第四范式版GPT能力首秀,有点不一样

金磊 发自 第四范式大厦量子位 | 公众号 QbitAI 国产大模型能大战,又有一员猛将入局。 就在刚刚,第四范式自研大模型“式说”(4Paradigm SageGPT)在上线2个月后,终于来了一波能力首秀。 而且纵观整场活动的发布&#x…

2023 AI大语言模型TOP10

注:本次评测时间截至2023.5.10,评价指标主要包括语义理解、逻辑推理、情感分析、百科知识、文本质量五个维度) 今年春节档,一部《流浪地球2》点燃了沉寂许久的中国科幻电影市场,也让MOSS这一电影里冷酷无情的强人工智能…

百度搜索迎来奇点 大模型掀起代际变革

每一轮技术革命掀起的浪潮,大部多数人还没来得及思考或者布局,已经消失于海浪中。机会是给有准备的人的,要发现新兴技术的亮点,并立足自身去积极拥抱它,最后转化为自身前进的动力,跨越周期,迎来…

劲爆!154页微软GPT研究报告:人工通用智能的火花,GPT-4的早期实验

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年2月份热门报告合集 ChatGPT调研报告(仅供内部参考) 文心一言、GPT3.5及GPT4应用测评对比报告 ChatGPT团队背景研究报告 ChatGPT的发展历程、原…

这 7个 AI 写作助手,太实用了

想象一下:你正在办公桌前为你的广告输入标题,但你突然思维阻塞并卡住了,可惜这时还没有神奇的软件可以帮助你想出点子。或许是有的? 2023 年,AI 写作工具似乎不可避免地会很快融入我们的工作流程中。现代知识工作者已…

怎样让chatGPT给你打工然后月入过百?(二)

上一篇:怎样让chatGPT给你打工然后月入过千? 前言 过千不现实,实测了一个月(2月份测的),收入 当时文库任务的行情好,每天都有任务,现在不行了经常刷不出任务,而且脚本…

2022软件质量与管理-考题复习

最下面有2022的软件工程与管理考题~ 简答题 【2021】估算的要点(10分) 尽可能划分详细一些; 建立对估算结果的信心; 依赖数据; 估算是利益相关者达成共识的过程,而不是结果。 【2021】基于Yield构建预测模型(10分) 基于Yield指标构…

私有部署、重构企业软件,第四范式发布大模型“式说”

大模型领域再添重要一员! 4月26日,第四范式首次向公众展示其大模型产品「式说3.0」,并首次提出AIGS战略(AI-Generated Software):以生成式AI重构企业软件。式说将定位为基于多模态大模型的新型开发平台&…

从0到1使用chatGPT以及简单调用JAVA api实现网页的交互

文章目录 前言注册过程如何使得提示词更加的准确?api的简单调用用httpclient去手动填充请求头现成封装的方法 最终效果 前言 本文探讨的是从0到1,如何注册GPT账号,如何编写提示词(prompt),以及简单的java调…

Laf 的价格被打下来了,最高买一送一!(限时五天)

Laf 公众号已接入了 GPT4,完全免费!欢迎前来调戏👇 Laf 上线以来本着丝滑的用户体验,良心的价格,收获众多用户好评,为了回馈新老用户的支持与厚爱,本次 618 放出了巨额优惠,最高可买…

人人都能接入 Claude,赚取自己的第二桶金

Laf 公众号已接入了 AI 绘画工具 Midjourney&#xff0c;可以让你轻松画出很多“大师”级的作品。同时还接入了 AI 聊天机器人&#xff0c;支持 GPT、Claude 以及 Laf 专有模型&#xff0c;可通过指令来随意切换模型。欢迎前来调戏&#x1f447; <<< 左右滑动见更多 &…

神理论 | 我面向淘宝编程,而你面向什么编程?(文末赠书5本)

神理论 | 我面向淘宝编程&#xff0c;而你面向什么编程&#xff1f; 陌生人一定会疑问&#xff0c;嵌入式跟taobao有半毛钱关系啊&#xff1f;那么本文&#xff0c;博主就跟你聊聊&#xff0c;如何面向淘宝学习嵌入式&#xff01; 文章目录 1 写在前面2 面向XXX编程3 面向淘宝学…