什么是 Tomcat WebSocket?
Apache Tomcat 从 7.0.27 版本开始支持 JSR-356(Java API for WebSocket),允许开发者构建基于 WebSocket 协议的实时 Web 应用。WebSocket 提供了全双工通信通道,适用于聊天应用、实时数据推送、协作编辑等场景。
环境要求
- Tomcat 7.0.27 或更高版本(推荐 Tomcat 9/10)
- Java 8 或更高版本
- 支持 WebSocket 的浏览器(现代主流浏览器均支持)
简单 Java WebSocket 服务端示例
创建一个回显(Echo)WebSocket 端点:
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/echo")
public class EchoWebSocket {
@OnMessage
public void onMessage(String message, Session session) throws IOException {
session.getBasicRemote().sendText("Echo: " + message);
}
@OnOpen
public void onOpen(Session session) {
System.out.println("连接已建立");
}
@OnClose
public void onClose() {
System.out.println("连接已关闭");
}
@OnError
public void onError(Throwable error) {
error.printStackTrace();
}
}
将上述类放入你的 Web 项目中,并部署到 Tomcat。客户端可通过 ws://your-domain/your-app/echo 连接。
前端 JavaScript 客户端示例
const socket = new WebSocket('ws://localhost:8080/your-app/echo');
socket.onopen = function(event) {
socket.send("Hello Tomcat WebSocket!");
};
socket.onmessage = function(event) {
console.log('收到消息:', event.data);
};
常见问题
- 404 错误? 确保类路径正确,且 Tomcat 已启用 WebSocket 支持(默认开启)。
- 连接被拒绝? 检查防火墙、端口是否开放,以及 URL 路径是否匹配 @ServerEndpoint 注解。
- 并发问题? WebSocket 会话不是线程安全的,请避免多线程同时写入同一个 Session。