创建 WebSocket 通信
WebSocket 通过单个 TCP 连接提供双工/双向通信协议。
- 客户端打开与正在侦听 WebSocket 请求的服务器的连接
- 客户端使用 URI 连接到服务器。
- 服务器可以监听来自多个客户端的请求。
服务器端点
你可以通过使用 @ServerEndpoint
注释 POJO 来创建 WebSocket 服务器 entpoint。@OnMessage
修饰一个接收传入消息的方法。@OnOpen
可用于装饰在收到来自对等方的新连接时要调用的方法。类似地,当连接关闭时,调用用 @OnClose
注释的方法。
@ServerEndpoint("/websocket")
public class WebSocketServerEndpoint
{
@OnOpen
public void open(Session session) {
System.out.println("a client connected");
}
@OnClose
public void close(Session session) {
System.out.println("a client disconnected");
}
@OnMessage
public void handleMessage(String message) {
System.out.println("received a message from a websocket client! " + message);
}
}
客户端 Enpoint
与服务器端点类似,你可以通过使用 @ClientEndpoint
注释 POJO 来创建 WebSocket 客户端端点。
@ClientEndpoint
public class WebsocketClientEndpoint {
Session userSession = null;
// in our case i.e. "ws://localhost:8080/myApp/websocket"
public WebsocketClientEndpoint(URI endpointURI) {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.connectToServer(this, endpointURI);
}
@OnOpen
public void onOpen(Session userSession) {
System.out.println("opening websocket");
this.userSession = userSession;
}
@OnClose
public void onClose(Session userSession, CloseReason reason) {
System.out.println("closing websocket");
this.userSession = null;
}
@OnMessage
public void onMessage(String message) {
System.out.println("received message: "+ message);
}
public void sendMessage(String message) {
System.out.println("sending message: "+ message);
this.userSession.getAsyncRemote().sendText(message);
}
}