WebSocket的事件触发机制

python的websocket方法教程 WebSocket协议是在2008年由Web应用程序设计师和开发人员创建的,目的是为了在Web浏览器和服务器之间提供更高效、更低延迟的双向通信。它允许客户端和服务器在任何时候发送消息,无需重新建立TCP连接。WebSocket可以在Web浏览器和服务器之间传输文本和二进制数据,使得构建实时Web应用程序变得更加简单。WebSocket协议为Web浏览器和服务器之间提供了实时双向通信的能力,使得构建实时Web应用程序变得更加容易。 阅读详情

WebSocket API是纯事件驱动的。应用程序代码监听WebSocket对象上的事件,以便处理输入数据和连接状态的改变。WebSocket协议也是事件驱动的。客户端应用程序不需要轮询服务器来得到更新的数据。消息和事件将在服务器发送它们的时候异步到达。

WebSocket编程遵循异步编程模式,也就是说,只要WebSocket连接打开,应用程序就简单地监听事件。客户端不需要主动轮询服务器得到更多的信息。要开始监听事件,只要为WebSocket对象添加回调函数。也可以使用addEventListener() DOM方法为WebSocket对象添加事件监听器。

WebSocket对象调度4个不同的事件:

 open

 message

 error

 close

和所有Web API一样,可以用on<事件名称>处理程序属性监听这些事件,也可以使用addEventListener();方法。

1. WebSocket事件:open

一旦服务器响应了WebSocket连接请求,open事件触发并建立一个连接。open事件对应的回调函数称作onopen。

代码清单2-4说明建立WebSocket连接时如何处理该事件。


 

到open事件触发时,协议握手已经完成,WebSocket已经准备好发送和接收数据。如果应用程序接收到一个open事件,那么 可以确定WebSocket服务器成功地处理了连接请求,并且同意与应用程序通信。

2. WebSocket事件:message

WebSocket消息包含来自服务器的数据。你也可能听说过组成WebSocket消息的WebSocket帧(Frame)。第3章将详细讨论消息和帧的概念。为了理解消息使用API的方式,WebSocket API只输出完整的消息,而不是WebSocket帧。message事件在接收到消息时触发,对应于该事件的回调函数是onmessage。

代码清单2-5展示了一个接收文本消息并显示消息内容的消息处理程序。


 

除了文本,WebSocket消息还可以处理二进制数据,这种数据作为Blob消息(见代码清单2-6)或者ArrayBuffer消息处理(见代码清单2-7)。因为设置WebSocket消息二进制数据类型的应用程序会影响二进制消息,所以必须在读取数据之前决定用于客户端二进制输入数据的类型。

 

3. WebSocket事件:error

error事件在响应意外故障的时候触发。与该事件对应的回调函数为onerror。错误还会导致WebSocket连接关闭。如果你接收一个error事件,可以预期很快就会触发close事件。close事件中的代码和原因有时候能告诉你错误的根源。error事件处理程序是调用服务器重连逻辑以及处理来自WebSocket对象的异常的最佳场所。代码清单2-8展示了监听error事件的一个例子。



 

4. WebSocket事件:close
close事件在WebSocket连接关闭时触发。对应于close事件的回调函数是onclose。一旦连接关闭,客户端和服务器不再能接收或者发送消息。

说明 WebSocket规范还定义了ping和pong帧,可以用于持续连接(keep-alive)、心跳、网络状态检测、延迟测量等,但是WebSocket API目前没有输出这些特性。尽管浏览器接受ping帧,但是不会触发对应WebSocket上的ping事件。相反,浏览器将自动响应pong帧。然而,浏览器实例化的ping如果在一段时间内没有得到pong应答,可能会触发连接的close事件。第8章将详细介绍WebSocket的ping和pong。

当调用close()方法终止与服务器的连接时,也会触发onclose事件处理程序,如代码清单2-9所示。


 

WebSocket close事件在连接关闭时触发,这可能有多种原因,比如连接失败或者成功的WebSocket关闭握手。WebSocket对象特性readyState反映了连接的状态(2为正在关闭,3为已关闭)。

close事件有3个有用的属性(property),可以用于错误处理和恢复:wasClean、code和error。wasClean属性是一个布尔属性,表示连接是否顺利关闭。如果WebSocket的关闭是对来自服务器的一个close帧的响应,则该属性为true。如果连接是因为其他原因(例如,因为底层TCP连接关闭)关闭,则该属性为false。code和reason属性表示服务器发送的关闭握手状态。这些属性和WebSocket.close()方法中的code和reason参数一致,我们将在本章后面详加介绍。在第3章中,我们将在讨论WebSocket协议时讨论关闭的代码和它们的含义。

说明 关于WebSocket事件的更多细节,参见WebSocket API规范:http://www.w3.org/TR/websockets/。

ARM7外部总线接口EIM实战:连接SRAM/Flash的配置与调试指南 在嵌入式系统开发中,外部总线接口是连接微控制器与外部存储器(如SRAM、NOR Flash)的关键模块,它负责管理地址译码、总线时序和访问控制。其核心原理是通过可配置的寄存器,将CPU的访问请求转换为符合外部芯片时序要求的控制信号,实现“无胶合逻辑”的硬件连接。这项技术的价值在于能够灵活扩展有限的片上存储资源,满足复杂应用对数据缓存和程序存储的需求,广泛应用于工业控制、通信设备和消费电子等领域。本文以NXP MAC7100的EIM模块为例,深入解析其信号定义、寄存器配置逻辑和时序调试方法,特别是针对**地址 阅读详情

相关推荐

SSM框架下使用websocket实现后端发送消息至前端

本篇文章本人是根据实际项目需求进行书写的第一版,里面有些内容对大家或许没有用,但是核心代码本人已对其做了红色标注。文章讲解我将从maven坐标、HTML页面、js文件及后端代码一起书写。 一、maven坐标 <!-- WebSocket配置开始--> <dependency> <groupId>org.springframework</g...

spring_root的博客 1941

mfc 子窗体任何消息都不触发_你不知道的 WebSocket

本文阿宝哥将从多个方面入手,全方位带你一起探索 WebSocket 技术。阅读完本文,你将了解以下内容:了解 WebSocket 的诞生背景、WebSocket 是什么及它的优点;了解 WebSocket 含有哪些 API 及如何使用 WebSocket API 发送普通文本和二进制数据;了解 WebSocket 的握手协议和数据帧格式、掩码算法等相关知识;了解如何实现一个支持发送普通文...

weixin_39830200的博客 895

Canoe CAPL TCP通信避坑指南:从OnTcpConnect回调不触发到Socket句柄管理

本文详细解析了Canoe CAPL中TCP通信的常见问题与解决方案,包括OnTcpConnect回调不触发的三大原因、Socket句柄管理的内存泄漏风险、数据发送截断规则等。通过实战案例和代码示例,帮助开发者规避TCP通信中的典型陷阱,提升车载网络测试的稳定性和可靠性。

weixin_26976635的博客 358

新开页面websocket会重新连接么_详解前端如何搭建一个websocket服务器

前言今天这篇文章我们聊一聊websocket,上篇文章说到的SSE只能单向传递数据,而websocket是全双工的,可以双向传递数据!当我们遇到需要互相实时通信的场景时就可以使用它,比如聊天等!客户端使用在页面上的使用还是非常简单的,和上一篇的SSE类似,代码如下:图1浏览器提供了原生接口WebSocket,使用它的实例然后绑定几个事件就可以使用了!WebSocket的第一个参数是一个实现了web...

weixin_39957027的博客 931

ESP-01S使用micropython,利用Thonny烧写固件

在家舒服的太久了,想学习点新的东西,这次看上了ESP8266系列的联网设备,想自己做点小玩意出来耍耍,下面跟我一起来学习吧。本篇主要记录固件的烧写及测试。Thonny下载链接不算难,但是网上资源较少。也是提醒自己不要忘记这个步骤,记录一下,也分享给和我一样开始接触的小伙伴,加油加油,万事开头难。

weixin_43422072的博客 1692

【亲测有效】OpenClaw Gateway 出现 “(no output)“ 卡死问题完整解决指南:从手动重启到 systemd Watchdog 自动恢复

最近在使用 OpenClaw(自托管 AI 助手框架,前身 Clawdbot/Moltbot)时,遇到了一个非常常见的顽疾:TUI(终端界面)或 Telegram 等通道经常显示 "(no output)",消息发出去后机器人完全没反应,看起来像是卡死了。

hampeter的博客 8606

前端WebSocket的事件触发机制

WebSocket API是纯事件驱动的。应用程序代码监听WebSocket对象上的事件,以便处理输入数据和连接状态的改变。WebSocket协议也是事件驱动的。客户端应用程序不需要轮询服务器来得到更新的数据。消息和事件将在服务器发送它们的时候异步到达。 WebSocket编程遵循异步编程模式,也就是说,只要WebSocket连接打开,应用程序就简单地监听事件。客户端不需要主动轮询服务器得到更多...

細水、長流√的专栏 1985

OpenHarness代码解读

Harness 是包裹在大模型之外、为其赋予完整执行能力的全套基础设施。模型负责提供智能与推理,Harness 则为模型提供感知、行动、记忆、工具与安全约束,使其从语言模型变成可自主完成复杂任务的实用智能体。我这里把向量数据库方案定义为:把对话片段、事件、偏好、工具结果等切成 memory chunks,做 embedding,存进向量库,查询时靠 ANN 相似度召回,再交给 LLM 读。AAAI 的综述类论文就明确指出,很多 LLM agent 的长期记忆就是这么做的。AAAI 期刊把文件系统方案。

qq_52053775的博客 187

websocket一些事件的触发机制

websocket的一些方法的触发机制

weixin_44001317的博客 1176

手把手教您windows如何正确的开启局域网共享,如何解决“没权限、空密码访问等诸多问题”,含手动操作教程 + 傻瓜式一键设置工具(局域网共享+打印机管理),二选一总有一款能满足您!

😫 Windows共享总失败?别抓狂!这篇教程带你破解“空密码”访问的核心难题 🔑,四步搞定所有设置。文末还附赠“一键修复”神器 🚀,让文件共享丝滑如德芙!

XiaoqiangClub的博客 1451

069_死区效应对输出电压畸变的补偿思路

死区效应导致逆变器输出电压在过零点出现台阶畸变,引发THD升高。其本质是死区期间续流二极管钳位造成的非线性误差,与电流方向、负载大小、母线电压耦合。补偿需结合前馈(基于电流方向自适应调整偏置)与反馈(抑制残余谐波),关键在于准确判断电流方向(采用滞环滤波避免跳变)、合理设置补偿量(随负载动态调整),并注意补偿位置、极性及限幅防漂移。调试应通过差分探头、FFT频谱等手段验证效果,最终实现全负载范围内的低畸变输出。

2401_88858637的博客 21

mysql+mmm+主动模式_WebSocket的事件触发机制

WebSocket API是纯事件驱动的。应用程序代码监听WebSocket对象上的事件,以便处理输入数据和连接状态的改变。WebSocket协议也是事件驱动的。客户端应用程序不需要轮询服务器来得到更新的数据。消息和事件将在服务器发送它们的时候异步到达。WebSocket编程遵循异步编程模式,也就是说,只要WebSocket连接打开,应用程序就简单地监听事件。客户端不需要主动轮询服务器得到更多的信...

weixin_32657751的博客 245

14、微电网控制方法与建模分析

本文详细探讨了微电网的控制方法与建模分析,包括逆变器的小信号状态空间模型、网络模型、负载模型及其组合形成的完整微电网模型。通过对系统特征值和灵敏度因子的分析,揭示了不同模式与系统参数之间的关系。文章还提出了多个研究问题,如岛式系统控制器设计、风力发电控制、并网变换器控制等,为微电网的稳定性分析和优化控制提供了理论支持和实践方向。

elastic6hunter的博客 121

GB28181国标视频平台一键部署:wvp-GB28181-pro 完整指南

老板的需求经常是:“把各楼层的摄像头接进来,浏览器能看,再挑几路上报到市里的上级平台。”传统做法听着不难,做起来却处处踩坑:每个品牌的摄像机各有一整套 SDK,浏览器要装插件,普通 RTSP 流接不进上级平台,跨网级联还要再写一堆信令。**wvp-GB28181-pro** 是一个开箱即用的 GB28181 / 部标808+1078 网络视频平台,信令、设备管理、国标级联、网页播放一套全包。 #

gitblog_00347的博客 934

YOLOv11涨点改进 | Conv篇/小目标改进 | YOLOv11引入SPDConv卷积特征无损下采样模块,增加YOLOv11小目标P2检测层(助力小目标任务高效涨点)

本文提出了一种创新的SPDConv模块来优化YOLOv11模型,通过空间到深度(SPD)层和非步幅卷积层实现特征无损下采样。该方法有效解决了传统CNN中因跨步卷积和池化层导致的细粒度信息丢失问题,特别提升了小目标检测性能。实验表明,SPDConv在目标检测和图像分类任务中显著优于现有SOTA模型。文章详细介绍了模块原理、核心代码实现,并提供了YOLOv11集成SPDConv的具体方法,包括配置文件修改和P2层增强等优化技巧。该技术为计算机视觉任务提供了一种高效的特征保留方案。

Ai缝合怪、助力小伙伴高效发论文 586

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Ajax轮询和WebSocket区别以及WebSocket触发机制

Ajax轮询和WebSocketAjax轮询WebSocketWebSocket的事件触发机制 Ajax轮询 ajax轮询十分简单,让浏览器每隔几秒就发送请求,询问服务器是否有新的信息。也就是说,客户端发起连接后,如果没消息,就一直不返回Response给客户端。直到有消息才返回,返回完之后,客户端再次建立连接,周而复始。(太过被动。服务器不能主动联系客户端,只能由客户端发起) WebSocket 当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端啦。只需要经过

zf118的博客 1397

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Websocket不是有close事件吗?为什么还要心跳机制?

这个机制是内置在 WebSocket 协议中的标准功能,主要用来处理服务器端的逻辑,帮助服务器检测客户端连接是否仍然活着,及时清理无效连接,释放资源。”的消息(如 ping),服务器在收到后会回应“你还活着”(如 pong)。总结来说,服务器端的 ping/pong 是 WebSocket 协议层的自动机制,主要用来让服务器监测客户端的连接状态,处理服务器端的连接管理逻辑。而客户端的心跳是应用层的自定义机制,需要开发者自行实现,帮助客户端感知自身连接状态,处理客户端自身的连接管理逻辑。

weixin_36503336的博客 740

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

在websocket在实际应用中,如何处理连接状态的变化和重连机制?

监听连接状态变化:使用opencloseerror等事件来监听连接的状态变化。自动重连:在连接关闭或出错时,通过重连机制恢复连接,常用的方法包括指数退避算法。重连策略:设置最大重连次数,并根据实际需求选择自动重连或手动重连。状态管理:在应用中管理 WebSocket 连接的状态,并根据状态变化调整业务逻辑。

前端程序员、项目经理、人工智能博主 1309

理解WebSocket心跳及重连机制

在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件。这样会有:服务器会继续向客户端发送多余的链接,并且这些数据还会丢失。所以就需要一种机制来检测客户端和服务端是否处于正常的链接状态。因此就有了websocket的心跳了。还有心跳,说明还活着,没有心跳说明已经挂掉了。 1. 为什么叫心跳包呢? 它就像心跳一样每隔固定的时间发一次,来告诉服务器,我还活着。 2. 心跳机制是? 心跳机制是每隔一段时间会向服务器发送一个数据包,告诉服务器自己

shadow_zed的博客 5356

c# websocket 心跳重连_websocket重连机制

在弱网环境或者网络暂时断连的情况下,我们需要一套稳定的重连机制来保证在网络不稳定的时候,客户端和服务端能够重连,继续通信。本文将会针对websocket协议的重连机制进行详细描述。思路在实例化websocket后,我们会定义好各个回调事件需要执行的函数var ws = new WebSocket(url);ws.onclose = function () { //连接关闭};ws.onerror ...

weixin_33916124的博客 2062

理解WebSocket心跳及重连机制以及加强版的reconnectingwebsocket.js实现

理解WebSocket心跳及重连机制 在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件。这样会有:服务器会继续向客户端发送多余的链接,并且这些数据还会丢失。所以就需要一种机制来检测客户端和服务端是否处于正常的链接状态。因此就有了websocket的心跳了。还有心跳,说明还活着,没有心跳说明已经挂掉了。 1. 为什么叫心跳包呢? 它就像心跳一样每隔固定的时间发一次,来告诉服务器,我还活着。 2. 心跳机制是? 心跳机制是每隔..

liinux-Talk is cheap,show me the code. 6346
上一篇: composer安装
下一篇: 使用yeild实现spinlock
FreeeLinux
博客等级 码龄11年 421粉丝 356原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值