【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

浅析 Java EE 7 的 WebSocket 支持

  • 2013-07-01
  • 本文字数:1609 字

    阅读完需:约 5 分钟

Java EE 7 引入了一系列新的 API 并修改了部分既有的 API 以满足 web 开发者使用 HTML5 的相关需求。这些新的 API 主要由三个方面组成:处理 JSON 的新 API、针对JSF 的新属性处理的重大更新以及支持WebSocket 协议(组成HTML5 的众多技术之一)的最新API。

WebSocket 协议改变了 web 服务器响应客户端请求的方式:新方式取代了原来关闭连接的方式,服务器将返回 101 状态码并将连接保持在打开状态,该协议期望达到的效果是消息可以在流上读取也可以被写入到流中。它与 HTTP 不同,该协议支持全双工通信,所以客户端(通常是浏览器)和服务器之间可以在同一时间互相发送消息。

WebSocket 协议通过 IETF RFC 6455 进行定义。

为了建立 WebSocket 连接,客户端会向服务器发起一个 WebSocket 握手请求,而服务器将会作出响应,如下面的例子所示:

GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com

服务器响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

一旦握手成功后,客户端和服务器便处于连接状态并成为了对等的两个节点(peer);双方都可以发送或接收消息,以及终止本次连接。

我们通常使用 JavaScript 并结合由 W3C 定义的相关 API 来处理 WebSocket 客户端。Java WebSocket 应用由 WebSocket 端点(endpoint)构成,该端点是一些 Java 对象,用于表示 WebSocket 两节点之间连接的某一端。

Java WebSocket API 将一次会话中的每个具有端点的节点(each peer of a session with an endpoint)模拟成一个 RemoteEndpoint 接口的实例。该接口及其两个子类型(RemoteEndpoint.Whole 和 RemoteEndpoint.Partial)包含了各种各样用于将 WebSocket 消息从端点发送至其节点的方法。

有两种方式可以用以创建端点。第一种是实现 Java WebSocket API 中某些具有必需行为的 API 类,从而能够处理端点生命周期、消费和发送消息、发布自身或连接到节点。

复制代码
session.addMessageHandler(new MessageHandler.Whole
<String>() {
public void onMessage(String text) {
try {
remote.sendText("Got your message (" + text +
"). Thanks !");
} catch (IOException ioe) {
ioe.printStackTrace();
} }

第二种方式是使用 Java WebSocket API 中的某些注解来装饰一个普通 Java 类(POJO)。底层实现将会根据这些被注解的类在运行时创建合适的对象,从而将 POJO 部署为 WebSocket 端点。

复制代码
@ServerEndpoint("/hello")
public class MyHelloServer {
@OnMessage
public String handleMessage(String message) {
return "Got your message (" + message + ").
Thanks !";
} }

API 对每个 Session 的 MessageHandler 注册进行了限制:每个原生 WebSocket 消息(text、binary、pong)类型只能有一个 MessageHandler,该限制有可能在将来会发生变化。

端点在建立 WebSocket 连接的握手开始阶段参与进来,通常都会发送和接收各种各样的 WebSocket 消息。端点的生命周期在 WebSocket 连接关闭时结束。

不论是由于从节点收到 WebSocket 关闭事件,还是因为底层实现需要关闭连接,只要在 WebSocket 端点上的某个打开连接由于任何原因将要被关闭时,WebSocket 实现必须调用 WebSocket 端点的 onClose() 方法。

当然,在 Java EE 7 引入之前也可以使用 Java 来实现 WebSocket 应用,但是这些不同 API 的使用方式之间都有着些许的差异,所以,如果你曾在 Apache Tomcat 7 容器下编写过 WebSocket 应用,那么这些应用都将需要进行修改才能在 Jetty、JBoss 或 Resin 中正常工作。有了可以在 Java EE 中完成以上工作的标准方法是一件非常受欢迎的事。

查看英文原文: Java EE 7 WebSocket Support

2013-07-01 06:5016493
用户头像

发布了 52 篇内容, 共 22.0 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

百度 Serverless 架构揭秘与应用实践

百度开发者中心

百度 开源 Serverless 云原生

SAP CRM WebClient UI里的文件是如何上传到ABAP Netweaver后台的

Jerry Wang

chrome CRM SAP WebClient UI

SAP CRM, C4C和Hybris的后台作业

Jerry Wang

CRM SAP C4C Hybris

为什么5、6月会空缺出大量技术岗?跳槽注意事项+面试官关心什么

Java架构师迁哥

面向WEB开发人员的Docker(五):部署开发WordPress

devpoint

Docker Wordpress 部署 Docker-compose

科大讯飞语音转文字以及中文分词的Java测试代码

Jerry Wang

Java 人工智能

使用ABAP和JavaScript代码生成PDF文件的几种方式

Jerry Wang

JavaScript PDF abap Acrobat

超级详细!全网独家首发的SpringCloud Alibaba 到底有多强?

Java 程序员 架构 面试

使用Excel调用ABAP系统的函数

Jerry Wang

Excel Office SAP abap

动态控制SAP C4C UI元素的显示和隐藏

Jerry Wang

CRM SAP C4C Cloud for Customer

论:在996的天下,Java程序员该如何高效学习

Java架构师迁哥

throw与throws的区别学习笔记

风翱

异常 5月日更

redis sentinel架构

王瑞强

如何将Twitter的内容导入到SAP CRM和C4C

Jerry Wang

twitter CRM SAP C4C Cloud for Customer

部署混合云环境的5大挑战

浪潮云

云计算

华为HMS生态和1+8+N的交叉点,点透棋局的华为帐号

脑极体

(VMware)ubuntu环境下搭建Swarm+Stack一站式部署容器集群

逸少

Docker Docker Swarm Docker-compose Ubuntu20.04

数据湖vs数据仓库vs数据集市

数据社

数据仓库 数据湖 5月日更

SAP成都C4C小李探花:浅谈Fiori Design Guidelines

Jerry Wang

大前端 Fiori SAP UI5

高级软件工程师必备的五大技能

架构精进之路

5月日更

☕【JVM 技术之旅】让你完全攻克内存溢出(OOM)这一难题(上)

洛神灬殇

JVM OOM 异常 Exception 5月日更

简单了解 MySQL 中相关的锁

leonsh

MySQL 后端

5分钟速读之Rust权威指南(八)

wzx

rust

双非渣硕也能上岸?痛述阿里Java岗7轮技术面经历,险幸上岸

Java 程序员 架构 面试

C4C和CRM里获取当前登录用户分配的Organization Unit

Jerry Wang

CRM SAP C4C Cloud for Customer

使用Excel消费C4C的OData service

Jerry Wang

Excel SAP C4C OData

IO

ltc

IO流

存储技术入门,这些硬件应该首先有所了解

SunnyZhang的IT世界

服务器 存储 交换机 san

UI5应用部署到Fiori On-Premise和On-Cloud的Launchpad

Jerry Wang

Fiori SAP UI5 Launchpad

ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证

Jerry Wang

abap Netweaver Hybris Commerce Cloud

UI5 Source code map机制的细节介绍

Jerry Wang

JavaScript SAP SAP UI5

浅析Java EE 7的WebSocket 支持_Java_Charles Humble_InfoQ精选文章