WebSocket的事件触发机制

转载 2017年04月14日 10:23:31

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/

typescript事件通知机制

PS: 本文参考PureMVC 用到的模式是观察者模式,本来是自己想要一个事件通知机制,刚好看到pureMVC,于是单独把里面的事件通知剥离出来单独用,只有静态的方法,如果你想要考虑复用的话, 可以...
  • a19352226
  • a19352226
  • 2016年10月16日 22:54
  • 4022

spring mvc 4整合spring websocket,点对点式通讯,stomp监听连接

spring mvc 4整合spring websocket,实现点对点式通讯(spring boot也可以参加,大同小异).包含对连接的成功、断开处理...
  • jie873440996
  • jie873440996
  • 2017年04月20日 15:49
  • 3333

基于文件过滤驱动和事件触发的网页防篡改机制

  • 2010年08月31日 16:18
  • 395KB
  • 下载

websocket 实现实时推送的例子(工厂模式,回调机制)

  • 2017年04月27日 15:40
  • 3.96MB
  • 下载

事件触发机制:Poll,Select和Epoll实现原理分析

Poll和Select和Epoll都是事件触发机制,当等待的事件发生就触发进行处理,多用于linux实现的服务器对客户端连接的处理。 Poll和Select都是这样的机制:可以阻塞地同时探测一组支持非...
  • wangxiaoqin00007
  • wangxiaoqin00007
  • 2013年11月07日 13:36
  • 7167

事件触发、分发、observer机制----消息总线架构模式(中介者(调停者)设计模式)

传统的observer(事件-监听)机制一般使用 比较直观的一种是使用一种“注册——通知——撤销注册”的形式。但是这种形式可以通过一个纯被观察对象的纯虚接口类实现依赖倒置实现解耦,但是事实还是有一定的...
  • klarclm
  • klarclm
  • 2012年03月09日 19:30
  • 7954

钱柜娱乐开户 Button事件触发机制介绍

当你点击手机屏幕的一个按钮时,如何给它一个点击事件呢?     第一种:匿名内部类作为事件监听器类   大部分事件监听器只是临时使用一次,这种形式是目前是最广泛的事件监听器形式。   ...
  • sange77
  • sange77
  • 2014年09月01日 18:13
  • 508

钱柜娱乐开户 ViewGroup中事件触发和传递机制

针对由于触摸(Touch)而触发的事件。 钱柜娱乐开户的事件:onClick, onScroll, onFling等等,都是由许多个Touch组成的。其中Touch的第一个状态肯定是       ...
  • xjntcl
  • xjntcl
  • 2013年09月03日 14:16
  • 582

钱柜娱乐开户 ViewGroup中事件触发和传递机制

转载地址:/starfeng11/article/details/7009338    针对由于触摸(Touch)而触发的事件。 Androi...
  • shop24h
  • shop24h
  • 2014年01月24日 17:36
  • 356

事件机制实现超时触发功能,同时捕捉Ctrl+C信号

更多代码详细请参见:https://github.com/wcwu/Timout-Event 超时事件任务包括几个部分: 事件结构体的构造;事件的初始化;事件的注册;事件的删除; 事件的...
  • enwhat
  • enwhat
  • 2015年08月25日 20:21
  • 368
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WebSocket的事件触发机制
举报原因:
原因补充:

(最多只允许输入30个字)