为什么80%的码农都做不了架构师?>>>   

本章将讲述WebSocket端点的生命周期。WebSocket端点的生命周期为开发人员提供了一个框架来管理端点所需要的资源,也提供了一个框架来拦截消息。我们将仔细探讨其生命周期的顺序和语义,以及Java WebSocket API如何提供API和注解来支持处理这些事件。

一、WebSocket协议

与基于HTTP的技术不同,WebSocket具有生命周期。此生命周期周期由WebSocket协议支撑。WebSocket协议定义了客户端和服务器长时间存活的专用的TCP连接,一旦连接已经建立,数据的传输就可以往返传输。WebSocket协议中包含两种主要类型的帧:控制帧和数据帧。控制帧是用于执行协议的一些内部逻辑的数据传输。例如关闭帧(意味着发送者准备关闭连接)、Ping帧(检查WebSocket对等节点的连接的健康性)。Pong帧(对Ping帧做出回应)。数据帧定义了携带应用数据的WebSocket传输的种类。数据帧分为两类:文本型和二进制型(例如,图像数据)。

二、WebSocket生命周期

所有Java WebSocket端点生命周期的第一个事件是打开通知,它用来指示到WebSocket会话另一端的连接已经建立。一旦打开通知被WebSocket对话的两端都接收到,参与的任意WebSocket后续就可以发送消息了。在WebSocket对话期间,可能会出现一些消息传递的错误。接受消息的WebSocket端点本身就可能产生错误,或者WebSocket实现本身在某些情况下也会产生错误。要注意对错误的处理。不管在WebSocket对话的哪一端准备结束对话,他都可以初始化关闭事件。下面从Java组件的视角来看看其生命周期如何呈现。

  • 打开事件:@OnOpen 此事件发生在端点上建立新连接时并且在任何其他事件发生之前

  • 消息事件:@OnMessage 此事件接收WebSocket对话中另一端发送的消息。

  • 错误事件:@OnError 此事件在WebSocket连接或者端点发生错误时产生

  • 关闭事件:@OnClose 此事件表示WebSocket端点的连接目前部分地关闭,它可以由参与连接的任意一个端点发出

你可能已经注意到,我用注解式来说明端点事件处理,这正是WebSocket所推荐的。虽然,你也可以用继承式来编程这些事件

  1. @OnOpen 指示当此端点建立新的连接时调用此方法。此事件伴随着三部分信息:WebSocket Session对象,用于表示已经建立好的连接;配置对象(EndpointConfig的实例),包含了用来配置端点的信息;一组路径参数,用于打开阶段握手时WebSocket端点入站匹配URI。@OnOpen注解的方法是没有任何返回值的公有方法,这些方法有一个可选的Session参数、一个可选的EndpointConfig参数,以及任意数量的被@PathParam注解的String参数。

  2. @OnMessage 处理入站的消息。连接上的消息将以3种基本形式抵达:文本消息、二进制消息或者Pong消息。最基本的形式是选择使用带String参数的方法来处理文本消息;使用ByteBuffer或者是byte[]参数的方法来处理二进制文本;若你的消息仅仅是处理Pong消息,则可以使用Java WebSocket API中的PongMessage接口的一个实例。当然可以使用一个boolean型参数表示对到来的消息进行分片。当boolean型参数值为false时,表示后续还有整个文本消息序列中的更多消息分片的到来,当设置为true时,表示当前消息是消息分片中最后一个分片。消息的处理还有很多选项,比如使用JavaI/O,甚至可以让WebSocket实现把入站消息转换成自己选择的对象。这个将在消息通信基础中提到,WebSocket应用一般是异步的双向消息。因此通过@OnMessage注解的此类方法上有一个额外选项:方法可以有返回值或者返回为空。当使用@OnMessage注解的方法有返回类型时,WebSocket实现立即将返回值作为消息返回给刚刚在方法中处理的消息的发送者。

  3. @OnError 可以处理WebSocket实现处理入站消息时发生的任何异常。处理入站消息时,可能会发生3中基本的错误类型。首先,WebSocket实现产生的错误可能会发生,这些异常属于SessionException类型,其次,错误可能会发生在当WebSocket实现试图将入站消息解码成开发人员所需要的对象时。此类错误都是DecodeException类型。最后是由WebSocket端点的其他方法产生的运行时错误。WebSocket实现将记录WebSocket端点操作过程中产生的任何异常。

  4. @OnClose 它对于在WebSocket连接关闭时做其他的通用清理工作。@OnClose 可以用来注解多种不同类型的方法来关闭事件。

下面将用一个红绿灯演示了WebSocket的生命周期,示例连接:Lifecycle示例(一)、Lifecycle示例(二)

本文出自 “阿酷博客源” 博客,请务必保留此出处http://aku28907.blog.51cto.com/5668513/1788952

转载于:https://my.oschina.net/mrku/blog/693734

Java WebSocket生命周期相关推荐

  1. java websocket 生存期_Java WebSocket生命周期

    本章将讲述WebSocket端点的生命周期.WebSocket端点的生命周期为开发人员提供了一个框架来管理端点所需要的资源,也提供了一个框架来拦截消息.我们将仔细探讨其生命周期的顺序和语义,以及Jav ...

  2. java对象生命周期_Java对象生命周期和类生命周期

    原标题:Java对象生命周期和类生命周期 作者:彭空空 链接:https://www.jianshu.com/p/25ea857ba78b 导读 对象的生命周期 类的加载机制 类的生命周期 类加载器 ...

  3. java resume过时方法_面试官没想到,一个 Java 线程生命周期,我可以扯半小时

    面试官:你不是精通 Java 并发吗?从基础的 Java 线程生命周期开始讲讲吧. 好的,面试官.吧啦啦啦... 如果要说 Java 线程的生命周期的话,那我觉得就要先说说操作系统的线程生命周期 因为 ...

  4. Java 对象生命周期

    Java 对象生命周期 一直对Java对象的实例化.对象.对象的引用.堆 栈存放的内容迷惑不解.看了 Java编程思想,理解似乎又深了一层. 对象和对象的引用 Java 编程思想中,把对象的引用比喻成 ...

  5. Java 对象生命周期和类生命周期

    Java 对象生命周期 在JVM运行空间中,对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation).应用阶段(Using).不可视阶段(Invisible).不可到达阶段(Unreach ...

  6. java main生命周期_Java从入门到入土(62)线程的生命周期

    线程是程序内部的一个顺序控制流,他具有一个特定的生命周期.在一个线程的生命周期中,他总是处于某一种状态中.线程的状态表示了线程正在进行的活动以及在这段时间内线程能完成的任务. 线程的生命周期包括五个状 ...

  7. java方法生命周期_Java线程的第二种实现方式以及生命周期

    上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...

  8. java调试生命周期,一种基于JAVA的智能合约生命周期的管理方法与流程

    本发明涉及区块链技术,尤其涉及一种基于JAVA的智能合约生命周期的管理方法. 背景技术: 区块链技术,区块链是一种新型去中心化协议,能安全地存储数字货币交易或其他数据,信息不可伪造和篡改,区块链上的交 ...

  9. java 类加载生命周期_Java类的加载与生命周期

    一.概要: 类的生命周期从类的 加载.连接.初始化 开始,到类的 卸载结束: 二.几个阶段: 加载:查找并加载类的二进制数据.(把类的.class文件的二进制数据读入内存,存放在运行时数据区的方法区: ...

最新文章

  1. 线性代数:04 特征值与特征向量 -- 矩阵的相似对角化
  2. shell、javascript、python、tcl 等常用脚本语言
  3. 研究项目: JBoss架构分析
  4. 推荐一款移动端日历App吉日历
  5. Examine Scheduling Policies
  6. 用特征光谱分类神经网络
  7. 4.11-固件映像包 (FIP)
  8. 人不能两次踏进同一条河流
  9. 7-11 玩转二叉树 (25 分)
  10. C语言课后习题(46)
  11. Docker : Docker镜像的分层结构
  12. js(一) 三大事件 实现注册验证
  13. mysql median_在MySQL中使用MEDIAN和MAX,MIN和AVG功能
  14. kotlin发音!2021年Android面试心得,安卓系列学习进阶视频
  15. IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false isAttached:t
  16. 3y开发都不的不写单元测试,然后被被批了
  17. 使用magick 遇到 convert: Non-conforming drawing primitive definition `text'错误的解决办法...
  18. 【FI模块学习笔记】预收款及收款清账
  19. 关于华为校招面试的那些事儿
  20. 智能电销机器人工作流程《各版本机器人部署》

热门文章

  1. 四种以太网数据包详解
  2. 隐含马尔科夫模型的训练
  3. Android中 ExpandableList的使用2
  4. DOA——MUSIC算法
  5. SylixOS DNS浅析
  6. Matlab中diag函数注意事项
  7. ubuntu文字界面与图形界面切换
  8. Android开源库--Gson谷歌官方json解析库
  9. 【Andorid学习】declare-styleable:自定义控件的属性
  10. 第十一章、认识与学习BASH