一、服务器端端点使用一个类级别注解@ServerEndpoint。
@ServerEndpoint是类级别的注解,告诉Java平台它注解的类实际上要成为一个WebSocket端点。它将简单传统的Java类转换成一个逻辑上的Websocket端点。此注解唯一强制参数是相对URI,开发人员希望这个端点在此相对URL之下可用。
Java Websocket使用“端点”来表示Websocket对话的一端。目前存在两种Java Websocket端点:注解式端点和编程式的端点。注解式端点是通过Java Websocket API注解将Java类转换成Java Websocket端点。编程式端点是通过继承Java Websocket API中的Endpoint类来实现。
二、Websocket端点的4个生命周期事件:
打开事件,消息事件,错误事件,关闭事件。
方法级注解:
@OnOpen:
当此端点建立新的连接时调用此方法,使得开发人员能够设置在Websocket对话时可能需要的任何信息。此事件伴随三部分信息:
1.Websocket Session对象,用于表示已经建立好的连接;
2.配置对象(EndpointConfig的实例)包含了用来配置端点信息;
3.一组路径参数,用于打开阶段握手时Websocket 端点匹配入站URI。
此类使用@OnOpen注解的方法是任何没有返回值的公有方法,这些方法有一个可选的Session参数,一个可选的EndpointConfig参数,以及任意数量的被@PathParam注解的String参数。另外这些参数可以任意排列。
@OnMessage
消息事件伴随的信息是:
1.Session对象,表示消息抵达时的连接;
2.EndpointConfig对象;
3.打开阶段握手中从匹配入站URI过程中获取的路径参数;
4.消息本身
消息以3种基本形式到达:文本信息,二进制信息,Pong信息。
最基本的形式是选择带String参数的方法处理文本信息;使用ByteBuffer或byte[]参数的方法来处理二进制消息;若消息仅仅处理Pong消息,可以使用PongMessage接口的一个实例。
Websocket应用一般是异步的双向消息。当使用@OnMessage注解的方法有返回类型时,Websocket实现立即将返回值作为消息返回给刚刚在方法中处理的消息的发送者。
@OnError:可以不处理。
伴随的信息是:
1.错误消息;
2.发生错误的会话;
3.建立连接的打开阶段握手相关联的任何一个路径参数。
@OnClose
伴随的信息是:
1.关闭信息;
2.建立连接的打开阶段握手相关联的任何一个路径参数。
3.连接关闭的原因的信息。(以CloseReason类的形式存在)
代码结构示例:
//该注解指定一个URI,客户端可以通过这个URI来连接到WebSocket。无需在web.xml中配置。
@ServerEndpoint("/websocket")
public class MyWebSocket {
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
/**
* 连接建立成功调用的方法
* @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据
*/
@OnOpen
public void onOpen(Session session){
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(){
}
/**
* 收到客户端消息后调用的方法
* @param message 客户端发送过来的消息
* @param session 可选的参数
*/
@OnMessage
public void onMessage(String message, Session session) {
}
/**
* 发生错误时调用
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error){
}