WebSocket端点(WebSocket Endpoint)是指在WebSocket协议中,服务器和客户端之间的通信通道的终端。在Java中,通常使用 @ServerEndpoint 注解来标识一个类作为WebSocket端点。这个类负责处理客户端的连接、接收消息、发送消息以及处理连接关闭等事件。
@ServerEndpoint 注解
@ServerEndpoint 是Java WebSocket API(JSR 356)提供的注解,用于标记一个类为WebSocket端点。这个注解可以指定端点的路径,以及其他配置信息。
常用注解和方法
@OnOpen:当一个新的WebSocket连接建立时调用。
@OnMessage:当从客户端接收到消息时调用。
@OnClose:当WebSocket连接关闭时调用。
@OnError:当WebSocket连接发生错误时调用。
示例代码
后端
java
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 {
@OnOpen
public void onOpen(Session session) {
System.out.println("Connection opened: " + session.getId());
}
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("Message received: " + message);
try {
// 回应客户端
session.getBasicRemote().sendText("Echo: " + message);
} catch (Exception e) {
e.printStackTrace();
}
}
@OnClose
public void onClose(Session session) {
System.out.println("Connection closed: " + session.getId());
}
@OnError
public void onError(Session session, Throwable throwable) {
System.out.println("Error occurred in session " + session.getId());
throwable.printStackTrace();
}
}
前端
html
<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>