知方号

知方号

WebSocket API 学习

https://abhirockzz.gitbooks.io/java-websocket-api-handbook/content/

◆WebSocket是什么简单来说,WebSocket是一个IETF的标准,RFC6455.具体来说,它是一个基于TCP的协议(就像HTTP)。你可以把它认为是一个介于长轮询和服务器推送消息之间的解决方案。WebSocket连接通过HTTP来做初始化握手。重要:一旦建立了,TCP连接一直打开着。

◆为什么要用WebSocket它的关键特性是・双向 服务器端和客户端都可以发起连接・全双工 一旦WebSocket的session建立后,服务器端和客户端可以同时收发信息。

上述特性使WebSocket非常适合低延迟和高频度消息传送需求的程序。比如,聊天,监控,多人在线游戏,广播实时财务数据等。其中一些优势(与其他解决方案相比)包括・减少冗余信息(相对于HTTP)・更有效率(相对于长轮询)・更丰富的语义(相对于服务器消息推送)

◆WebSocket作为一个java标准API与实现对Java来说,这项技术被定义为JSR 356 ,一个在2013年5月发布第一版本的标准API2014年8月发布了一个1.1版本。像其他JSR(java规范需求)定义的API,WebSocket的java api由一个规范支持,使它可以有不同的实现而表现一致。・Tyrus 一个开源项目,并且是Weblogic and GlassFish的参考实现。・Undertow JBoss EAP and Wildfly使用的实现・Tomcat 7以上版本 tomcat内部实现

Java EE PlatformJSR 356也是JavaEE7平台的一部分。任何符合JavaEE7的程序服务将包含一个默认的API实现。就像其他JAVAEE技术一样,比如EJB, CDI, Security等。

JSR356也被其他容器和框架支持比如Spring,Jetty等。

◆服务器和客户端模式・WebSocket Server endpoint一个服务器端组件是 实现了一些业务逻辑 公开自己,是自己可以被客户端发现(通过一个主机和端口) 当有客户端连接到它时触发

・WebSocket Client endpoint客户端组件 实现一些业务逻辑 连接到存在的WebSocket Server endpoint

Java WebSocket API 提供服务器和客户端组件 Server javax.websocket.server包 Client javax.websocket包 里面也包含了服务器客户端共通的内容

客户端组件包括ClientEndpoint, ClientEndpointConfig, ClientEndpointConfig.Builder, ClientEndpointConfig.Configurator, WebSocketContainer

支持的消息类型WebSocket规范支持两种在线数据格式 - 文本和二进制Java WebSocket API支持这些(显然),并增加了使用Java对象以及规范定义的健康检查消息(乒乓)的功能

Text java.lang.String, primitives or their equivalent wrapper classesBinary java.nio.ByteBuffer or a byte[] (byte array)Java objects API使您可以在代码中使用Java对象,并使用自定义变换器(编码器/解码器) 将其转换为WebSocket协议允许的兼容在线格式(文本,二进制)Ping, Pong javax.websocket.PongMessage是由WebSocket对响应健康检查(ping)请求发送的确认

◆容器抽象javax.websocket.WebSocketContainer 提供容器的高级视图,允许客户端端点激活和连接到现有(WebSocket)服务器,设置对服务器和客户端都适用的全局/公共属性(空闲连接超时,消息大小,异步发送超时)

javax.websocket.server.ServerContainer 用于服务器端的容器类(继承了WebSocketContainer) 增加了部署服务器端endpoint的功能

javax.websocket.ContainerProvider 提供了对WebSocketContainer的访问功能

WebSocketContainer container = ContainerProvider.getWebSocketContainer();container.setDefaultMaxSessionIdleTimeout(60000); //1 min. idle session timeoutcontainer.connectToServer(ChatClient.class, URI.create("ws://letschat:8080")); //connecting to a websocket server

//fetching the ServerContainer instance (from within a Server endpoint)ServerContainer container = (ServerContainer) session.getContainer();

◆RemoteEndpointWebSocket是一个通过两个对等的个体(客户端服务器端)交流的协议。RemoteEndpoint接口是配对的另一端的抽象

Synchronous 阻塞API 用javax.websocket.RemoteEndpoint.Basic执行Asynchronous 用javax.websocket.RemoteEndpoint.Async控制 调用者不会阻塞,它可以得到一个java.util.concurrent.Future返回 或者提供一个回调实现。

//Getting a handle to the remote endpoint

RemoteEndpoint.Basic basicPeerConnection = session.getBasicRemote();RemoteEndpoint.Async asyncPeerConnection = session.getAsyncRemote();

◆Endpointjavax.websocket.Endpoint代表WebSocket endpoint本身,服务器端或者客户端。API支持注解或者编程API。这个类被设计用于扩展(因为它是抽象的),并且适合于程序化样式优于注释驱动(

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。