WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,常用于实时数据传输场景。以下是 Java 中实现 WebSocket 的关键步骤与示例:
📌 基本概念
- 全双工通信:客户端与服务端可同时发送和接收数据(不同于 HTTP 的单向请求)
- 协议升级:通过 HTTP 握手建立 WebSocket 连接(
ws://
或wss://
) - 应用场景:在线聊天、实时通知、数据订阅等需要低延迟交互的场景
🧰 实现步骤
客户端
- 创建连接:
WebSocketClient client = new WebSocketClient(new URI("ws://example.com"))
- 发送消息:
client.send("Hello Server!")
- 接收消息:
client.setOnMessageHandler(...)
配置回调函数 - 处理事件:
client.setOnOpenHandler(...)
与client.setOnCloseHandler(...)
服务端
- 定义端点:
@ServerEndpoint("/ws/endpoint")
注解标注类 - 处理连接:
@OnOpen
方法接收Session
对象 - 消息处理:
@OnMessage
方法实现数据交互逻辑 - 关闭连接:
@OnClose
方法释放资源
💻 示例代码
// 服务端示例(使用 Tomcat WebSocket API)
@ServerEndpoint("/chat")
public class ChatEndpoint {
@OnOpen
public void onOpen(Session session) {
System.out.println("连接已建立");
}
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("收到消息: " + message);
}
}
// 客户端示例(使用 Java NIO)
WebSocketClient client = new WebSocketClient(new URI("ws://localhost:8080"));
client.connect(new AsyncResult() {
@Override
public void handle(Session session) {
session.getRemote().sendString("Ping");
}
});
⚠️ 注意事项
- ✅ 使用
@ServerEndpoint
注解时需添加javax.websocket
依赖 - 🔒 建议通过
wss://
使用加密连接(SSL/TLS) - 🔄 需处理心跳机制防止连接超时
- 🌐 跨域问题需配置
@ServerEndpoint
的config
参数
📚 扩展阅读
Java网络编程 可深入了解 TCP/IP 协议基础
WebSocket教程进阶 探讨性能优化与安全策略