WebSocket端点(WebSocket Endpoint)是指在WebSocket协议中,服务器和客户端之间的通信通道的终端。在Java中,通常使用 @ServerEndpoint 注解来标识一个类作为WebSocket端点。这个类负责处理客户端的连接、接收消息、发送消息以及处理连接关闭等事件。
@ServerEndpoint 注解
@ServerEndpoint 是Java WebSocket API(JSR 356)提供的注解,用于标记一个类为WebSocket端点。这个注解可以指定端点的路径,以及其他配置信息。
常用注解和方法
@OnOpen:当一个新的WebSocket连接建立时调用。
@OnMessage:当从客户端接收到消息时调用。
@OnClose:当WebSocket连接关闭时调用。
@OnError:当WebSocket连接发生错误时调用。
示例代码
后端
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;//指定WebSocket端点的路径为 /chat。客户端可以通过 ws://yourserver/chat 连接到这个端点。
@ServerEndpoint("/chat")
public class ChatEndpoint {@OnOpenpublic void onOpen(Session session) {System.out.println("Connection opened: " + session.getId());}@OnMessagepublic void onMessage(String message, Session session) {System.out.println("Message received: " + message);try {// 回应客户端session.getBasicRemote().sendText("Echo: " + message);} catch (Exception e) {e.printStackTrace();}}@OnClosepublic void onClose(Session session) {System.out.println("Connection closed: " + session.getId());}@OnErrorpublic void onError(Session session, Throwable throwable) {System.out.println("Error occurred in session " + session.getId());throwable.printStackTrace();}
}
前端
<input type="text" id="messageInput" /><button onclick="sendMessage()">Send</button><script>var socket = new WebSocket('ws://localhost:8080/chat');socket.onopen = function() {console.log('Connected to server');};socket.onmessage = function(event) {var messagesDiv = document.getElementById('messages');var messageElement = document.createElement('div');messageElement.textContent = event.data;messagesDiv.appendChild(messageElement);};socket.onclose = function() {console.log('Disconnected from server');};function sendMessage() {var input = document.getElementById('messageInput');socket.send(input.value);input.value = '';}</script>