版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、版权所有 2013,Oracle 和/或其关联公司。保留所有权利。1版权所有 2013,Oracle 和/或其关联公司。保留所有权利。2使用使用 JSR 356 在在 Java 中构中构建建 WebSocket 应用应用Arun G 2013,Oracle 和/或其关联公司。保留所有权利。3以下内容旨在概述产品的总体发展方向。该内容仅供参考,不可纳入任何合同。其内容不构成提供任何材料、代码或功能的承诺,并且不应该作为制定购买决策的依据。此处所述有关 Oracle 产品的任何特性或功能的开发、发布以及相应的日程安排均由 Oracle 自行决定。版权所有 2013,Oracle 和/或其关联公司。
2、保留所有权利。4议题议题WebSocket 基本知识JSR 356:Java API for WebSocket版权所有 2013,Oracle 和/或其关联公司。保留所有权利。5交互式网站交互式网站HTTP 为半双工协议HTTP 冗长而繁琐针对服务器推送的黑客攻击轮询长时间轮询Comet/Ajax复杂、低效、浪费版权所有 2013,Oracle 和/或其关联公司。保留所有权利。6WebSocket 将您解放出来将您解放出来基于 TCP 的双向全双工消息传递最初作为 HTML5 的一部分提出IETF 定义的协议协议:RFC 6455握手数据传输W3C 定义的 JavaScript API候选建
3、议版权所有 2013,Oracle 和/或其关联公司。保留所有权利。7基本理念是什么基本理念是什么?升级 HTTP 以升级至 WebSocket 单一 TCP 连接对代理、防火墙和路由器透明在两个方向发送数据帧(双向)无头部信息、Cookie、身份验证无安全开销用于保持激活的“ping”/“pong”帧发送彼此独立的消息(全双工)结束连接版权所有 2013,Oracle 和/或其关联公司。保留所有权利。8建立连接建立连接客户端握手请求握手响应服务器版权所有 2013,Oracle 和/或其关联公司。保留所有权利。9握手请求握手请求GET /chat HTTP/1.1Host: Upgrade:
4、 websocketConnection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ=Origin: http:/Sec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 13 版权所有 2013,Oracle 和/或其关联公司。保留所有权利。10握手响应握手响应HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: s3pPLMBiTxaQ9kYG
5、zzhZRbK+xOo=Sec-WebSocket-Protocol: chat 版权所有 2013,Oracle 和/或其关联公司。保留所有权利。11服务器客户端握手请求握手响应已连接!建立连接建立连接版权所有 2013,Oracle 和/或其关联公司。保留所有权利。12对等端点(服务器)对等端点(客户端)已连接!打开打开关闭消息错误消息消息消息消息已断开WebSocket 生命周期生命周期版权所有 2013,Oracle 和/或其关联公司。保留所有权利。13WebSocket API/TR/websockets/版权所有 2013,Oracle 和/或其关联公司。保留所
6、有权利。14http:/ 2013,Oracle 和/或其关联公司。保留所有权利。15JSR 356 规范规范用于创建 WebSocket 应用程序的标准 Java API透明的专家组/en/jsr/detail?id= EE 7 的一部分版权所有 2013,Oracle 和/或其关联公司。保留所有权利。16JSR 356:参考实现:参考实现Tyrus: GlassFish 4 中集成版权所有 2013,Oracle 和/或其关联公司。保留所有权利。17Java API for WebSocket 的特性的特性针对 WebSocket 服务器和客户端端点的 API注解式:Serv
7、erEndpoint、ClientEndpoint编程式:端点WebSocket 打开握手协商生命周期回调方法与 Java EE 技术集成版权所有 2013,Oracle 和/或其关联公司。保留所有权利。18Hello World 和基本POJO版权所有 2013,Oracle 和/或其关联公司。保留所有权利。19Hello World注解式端点import javax.websocket.*;ServerEndpoint(/hello)public class HelloBean OnMessage public String sayHello(String name) return “He
8、llo “ + name; 版权所有 2013,Oracle 和/或其关联公司。保留所有权利。20注注解解注解注解级别级别目的目的ServerEndpoint类将 POJO 转换为服务器端点ClientEndpoint类将 POJO 转换为客户端端点OnMessage方法截获 WebSocket Message 事件PathParam方法参数标记匹配的 URI 模板路径段OnOpen方法截获 WebSocket Open 事件OnClose方法截获 WebSocket Close 事件OnError方法在对话期间截获错误版权所有 2013,Oracle 和/或其关联公司。保留所有权利。21Se
9、rverEndpoint 属性属性value相对 URI 或 URI 模板例如,“/hello”或“/chat/subscriber-level”decoders消息解码器类名列表encoders消息编码器类名列表subprotocols受支持的子协议名称列表版权所有 2013,Oracle 和/或其关联公司。保留所有权利。22自定义负载自定义负载ServerEndpoint( value=/hello, decoders=MyMessageDecoder.class, encoders=MyMessageEncoder.class)public class MyEndpoint . . .版
10、权所有 2013,Oracle 和/或其关联公司。保留所有权利。23自定义负载自定义负载 文本解码器文本解码器public class MyMessageDecoder implements Decoder.Text public MyMessage decode(String s) JsonObject jsonObject = Json.createReader().readObject(); return new MyMessage(jsonObject); public boolean willDecode(String string) . . . return true; / Onl
11、y if can process the payload . . .版权所有 2013,Oracle 和/或其关联公司。保留所有权利。24自定义负载自定义负载 文本编码器文本编码器public class MyMessageEncoder implements Encoder.Text public String encode(MyMessage myMessage) return myMessage.jsonObject.toString(); . . .版权所有 2013,Oracle 和/或其关联公司。保留所有权利。25自定义负载自定义负载 二进制解码器二进制解码器public clas
12、s MyMessageDecoder implements Decoder.Binary public MyMessage decode(byte bytes) . . . return myMessage; public boolean willDecode(byte bytes) . . . return true; / Only if can process the payload . . .版权所有 2013,Oracle 和/或其关联公司。保留所有权利。26哪些方法可以使用哪些方法可以使用 OnMessage?以下类型之一:文本:String、Java 基元或等价类、String 和
13、 Boolean、Reader、任何具有相应解码器的类型二进制:byte、ByteBuffer、byte 和 Boolean、ByteBuffer 和 Boolean、InptuStream、任何具有相应解码器的类型Pong 消息:PongMessage 可选的 Session 参数 使用 PathParam 注解的 0 到 n 个 String 参数 返回类型:String、byte、ByteBuffer、JAVA 原始类型及其对应包装类,或者任何具有相应编码器的类型版权所有 2013,Oracle 和/或其关联公司。保留所有权利。27示例消息示例消息void m(String s);voi
14、d m(Float f, PathParam(“id”)int id);Product m(Reader reader, Session s);void m(byte b); or void m(ByteBuffer b);Book m(int i, Session s, PathParam(“isbn”)String isbn, PathParam(“store”)String store);版权所有 2013,Oracle 和/或其关联公司。保留所有权利。28聊天服务器聊天服务器ServerEndpoint(/chat)public class ChatBean static Set pe
15、ers = Collections.synchronizedSet(); OnOpen public void onOpen(Session peer) peers.add(peer); OnClose public void onClose(Session peer) peers.remove(peer); . . .版权所有 2013,Oracle 和/或其关联公司。保留所有权利。29聊天服务器聊天服务器 . . . OnMessage public void message(String message, Session client) for (Session peer :peers)
16、 peer.getBasicRemote().sendObject(message); 版权所有 2013,Oracle 和/或其关联公司。保留所有权利。30URI 模板匹配模板匹配仅 1 级ServerEndpoint(“/orders/order-id”)public class MyEndpoint OnMessage public void processOrder( PathParam(“order-id”)String orderId) . . . 版权所有 2013,Oracle 和/或其关联公司。保留所有权利。31WebSocket 客户端客户端ClientEndpointpu
17、blic class HelloClient OnMessage public void message(String message, Session session) / process message from server WebSocketContainer c = ContainerProvider.getWebSocketContainer();c.connectToServer(HelloClient.class, “hello”);版权所有 2013,Oracle 和/或其关联公司。保留所有权利。32Hello World 和基本非 POJO版权所有 2013,Oracle
18、和/或其关联公司。保留所有权利。33编程式端点编程式端点public class MyEndpoint extends Endpoint Override public void onOpen(Session session) session.addMessageHandler(new MessageHandler.Text() public void onMessage(String name) try session.getBasicRemote().sendText(“Hello “ + name); catch (IOException ex) ); 版权所有 2013,Oracle
19、和/或其关联公司。保留所有权利。34接口驱动的端点接口驱动的端点ServerEndpointConfiguration config = ServerEndpointConfigurationBuilder .create(MyEndpoint.class, “/foo”) .build();服务器封装版权所有 2013,Oracle 和/或其关联公司。保留所有权利。35服务器和客户端配置服务器和客户端配置服务器URI 匹配算法子协议和扩展协议消息编码器和解码器来源检查握手响应客户端请求的子协议和扩展协议消息编码器和解码器请求 URI版权所有 2013,Oracle 和/或其关联公司。保留所有权利。36与依赖注入的关系与依赖注入的关系支持端点所需要的全部依赖注入字段、方法、构造函数注入也支持使用拦截器版权所有 2013,Oracle 和/或其关联
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市道路施工文明施工制度
- 车站设备维护保养制度
- 2025年证券交易操作指南
- 财务资金筹集与投资管理制度
- 办公室设备维护与保养制度
- 养老院老人健康监测人员培训制度
- 养老院医疗护理服务质量制度
- 2026年秦皇岛市九龙山医院第二批公开选聘工作人员备考题库及1套完整答案详解
- 2026年龙岩市新罗区红坊镇卫生院公开招聘编外卫技人员备考题库含答案详解
- 2026年湖北特检院黄石分院编外人员招聘岗位表备考题库有答案详解
- 养老院对护工规范管理制度
- 2025年企业党支部书记年度述职报告
- 2026年孝昌县供水有限公司公开招聘正式员工备考题库及参考答案详解1套
- 2025年校长个人述职报告:凝心聚力抓落实 立德树人开新局
- 沥青混凝土面板全库盆防渗施工质量通病防治手册
- 2023-2024学年广东省广州市天河区七年级(上)期末英语试卷
- 汽车修理厂经营方案
- 对现行高中地理新教材理解上的几点困惑与思考 论文
- 重庆市丰都县2023-2024学年七年级上学期期末数学试题
- 美术教学中的跨学科教学策略
- mc尼龙浇铸工艺
评论
0/150
提交评论