WebSocket通信学习笔记
--JAVAEE规则简要学习
一:端点(节点)--Endpoint类
在使用WebSocket通信时的每一个点,都称之为端点,使用Endpoint类定义,该类在JavaEE规范内。具体介绍如下:
| javax.websocket Class Endpoint | |
| public Endpoint() | |
| 返回值 | 方法 |
| void | onClose(Session session, CloseReason closeReason) This method is called immediately prior to the session with the remote peer being closed.
|
| void | onError(Session session, Throwable thr) Developers may implement this method when the web socket session creates some kind of error that is not modeled in the web socket protocol.
|
| abstract void | onOpen(Session session, EndpointConfig config) Developers must implement this method to be notified when a new conversation has just begun.
|
|
|
|
二:会话--Session接口
会话是指两个端点直接的通信,Session完成了两个端点直接的交互。
JavaEE的规范定义Session是一个接口,全名是javax.websocket.Session。
三:接收消息--MessageHandler接口
Java-WebSocket提供了多种接收消息的机制,我们最需要使用的就是MessageHandler。JavaEE的规范定义MessageHandler是一个接口,全名是javax.websocket.MessageHandler。
MessageHandler是通过Session进行注册后,进行接收端点发送过来的消息。Session最多可以注册三个MessageHandler,一个是文本消息类型,一个是二进制消息类型,一个是PONG消息类型。
四:发送消息--RemoteEndpoint接口
JavaEE规范定义使用RemoteEndpoint接口类型实例化发送消息的远程端点,使用RemoteEndpoint向远程端点进行消息交互。avaEE的规范定义RemoteEndpoint是一个接口,全名是javax.websocket.RemoteEndpoint。
RemoteEndpoint内包含了多种方法向对端发送消息,使用Session的getRemote()方法获取RemoteEndpoint实例。
五:关闭连接--onClose方法
onClose()方法是端点对象内的一个方法,JavaEE规范定义,如果端点打开的连接需要关闭,不管是什么情况,都必须调用onClose()方法。
六:服务器端配置
根据JAVAEE规范,服务端可以进行如下的配置:
根据JAVAEE规范,配置websocket服务端需要实现ServerApplicationConfig接口,该接口的getEndpointConfigs()方法是用编程方式配置服务端,getAnnotatedEndpointClasses()方法是用注解方式配置服务端。
服务端点及服务端点的URL
设置服务端点主要是让服务器加载创建服务端点,服务端点的URL主要是客户端点与服务端点进行交互的地址。
编程式配置是要创建ServerEndpointConfig实例,在创建ServerEndpointConfig实例时需要使用服务端点类及服务端点URL两个变量。具体如下:
ServerEndpointConfig config =
ServerEndpointConfig.Builder.create(ServerEndpoint.class,"/websocket/msgServer")
.build();
ServerEndpoint是服务端点类,"/websocket/msgServer"是服务端点URL。
编码解析器
编码解析器是服务端点接收消息时,对消息按照一定格式进行解析。根据JAVAEE规范的定义,编码解析器需要实现Decoder接口,该接口有四个内部子接口,主要是解析文本类型和二进制类型两种。
文本类型子接口有两个,一个是直接使用字符串接收要解析的数据Text接口,另一个是使用字符流Reader进行接收要解析的数据TextStream接口。
二进制类型子接口根据接收数据的方式不同分为两种,一种是Binary子接口,是使用NIO的ByteBuffer进行接收要解析的数据,另一种是BinaryStream子接口,是使用InputStream字节流进行接收要解析的数据。
一个服务端点可以同时配置多个多种类型的解码器。根据不同的数据进行使用不同的数据解析器。
解码器对数据解码的规则,有程序员进行定义,并在相应的方法内使用代码实现。解码规则要与编码规则一一相对应。
消息编码器
消息编码器是服务端点发送消息时,对消息根据一定的编码规则进行编码。根据JAVAEE规范的定义,编码解析器需要实现Encoder接口,该接口有四个内部子接口,主要是解析文本类型和二进制类型两种。
文本类型子接口有两个,一个是Text子接口,是将要发送的数据按照一定规则直接编码成字符串的格式进行返回,另一个是TextStream子接口,该接口是根据一定的规则将数据进行编码,使用字符流Writer将数据发送。
二进制类型子接口根据接收数据的方式不同分为两种,一种是Binary子接口,它是将要发送的数据按照一定个规则进行编码,同时创建NIO的ByteBuffer,并返回;另一种是BinaryStream子接口,是它是将要发送的数据按照一定个规则进行编码,使用OutputStream字节流将数据发送。
一个服务端点可以同时配置多个多种类型的编码器。根据不同的数据进行使用不同的数据编码器。
编码器对数据编码的规则,有程序员进行定义,并在相应的方法内使用代码实现。编码规则要与解码规则一一相对应。
子协议
等等,有更多的配置,今后再做研究。
六:注解说明
今后再做研究
这篇博客详细介绍了WebSocket通信的基本概念和关键组件,包括Endpoint类、Session接口、MessageHandler、RemoteEndpoint以及如何配置服务器端,特别是编码解码器和子协议的设定。对于JavaEE开发者来说,这是深入理解WebSocket通信机制的入门指南。
3046

被折叠的 条评论
为什么被折叠?



