WebSocket学习笔记一

来源:互联网 发布:网络兼职插画师 编辑:程序博客网 时间:2024/05/19 19:14

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提供了多种接收消息的机制,我们最需要使用的就是MessageHandlerJavaEE的规范定义MessageHandler是一个接口,全名是javax.websocket.MessageHandler

MessageHandler是通过Session进行注册后,进行接收端点发送过来的消息。Session最多可以注册三个MessageHandler,一个是文本消息类型,一个是二进制消息类型,一个是PONG消息类型。

四:发送消息--RemoteEndpoint接口

JavaEE规范定义使用RemoteEndpoint接口类型实例化发送消息的远程端点,使用RemoteEndpoint向远程端点进行消息交互。avaEE的规范定义RemoteEndpoint是一个接口,全名是javax.websocket.RemoteEndpoint。

RemoteEndpoint内包含了多种方法向对端发送消息,使用SessiongetRemote()方法获取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子接口,是使用NIOByteBuffer进行接收要解析的数据,另一种是BinaryStream子接口,是使用InputStream字节流进行接收要解析的数据。

一个服务端点可以同时配置多个多种类型的解码器。根据不同的数据进行使用不同的数据解析器。

解码器对数据解码的规则,有程序员进行定义,并在相应的方法内使用代码实现。解码规则要与编码规则一一相对应。

消息编码器

消息编码器是服务端点发送消息时,对消息根据一定的编码规则进行编码。根据JAVAEE规范的定义,编码解析器需要实现Encoder接口,该接口有四个内部子接口,主要是解析文本类型和二进制类型两种。

文本类型子接口有两个,一个是Text子接口,是将要发送的数据按照一定规则直接编码成字符串的格式进行返回,另一个是TextStream子接口,该接口是根据一定的规则将数据进行编码,使用字符流Writer将数据发送。

二进制类型子接口根据接收数据的方式不同分为两种,一种是Binary子接口,它是将要发送的数据按照一定个规则进行编码,同时创建NIOByteBuffer,并返回;另一种是BinaryStream子接口,是它是将要发送的数据按照一定个规则进行编码,使用OutputStream字节流将数据发送。

一个服务端点可以同时配置多个多种类型的编码器。根据不同的数据进行使用不同的数据编码器。

编码器对数据编码的规则,有程序员进行定义,并在相应的方法内使用代码实现。编码规则要与解码规则一一相对应。

子协议

 

等等,有更多的配置,今后再做研究。

 

六:注解说明

今后再做研究

0 0
原创粉丝点击