java如何使用websocket
Java 使用 WebSocket 的方法
添加依赖
在 Maven 项目中,添加以下依赖以支持 WebSocket:
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
如果是 Spring Boot 项目,可以使用以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
创建 WebSocket 端点
使用 @ServerEndpoint 注解定义一个 WebSocket 端点,并实现相关方法:

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/ws")
public class WebSocketEndpoint {
@OnOpen
public void onOpen(Session session) {
System.out.println("WebSocket 连接建立: " + session.getId());
}
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("收到消息: " + message);
session.getAsyncRemote().sendText("服务器回复: " + message);
}
@OnClose
public void onClose(Session session) {
System.out.println("WebSocket 连接关闭: " + session.getId());
}
@OnError
public void onError(Session session, Throwable error) {
System.out.println("WebSocket 错误: " + error.getMessage());
}
}
配置 WebSocket 服务器
在 Java EE 环境中,WebSocket 会自动注册。对于 Spring Boot,需要配置 WebSocketConfigurer:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new MyWebSocketHandler(), "/ws")
.setAllowedOrigins("*");
}
}
客户端连接
使用 JavaScript 在浏览器中连接 WebSocket:

const socket = new WebSocket("ws://localhost:8080/ws");
socket.onopen = function() {
console.log("连接已建立");
socket.send("Hello, WebSocket!");
};
socket.onmessage = function(event) {
console.log("收到消息: " + event.data);
};
socket.onclose = function() {
console.log("连接已关闭");
};
处理二进制消息
如果需要处理二进制数据,可以在端点中定义 @OnMessage 方法:
@OnMessage
public void onBinaryMessage(ByteBuffer data, Session session) {
System.out.println("收到二进制数据: " + data.remaining() + " bytes");
}
群发消息
使用 Session 的 getOpenSessions() 方法可以向所有连接的客户端发送消息:
@OnMessage
public void onMessage(String message, Session session) {
for (Session s : session.getOpenSessions()) {
if (s.isOpen()) {
s.getAsyncRemote().sendText("广播: " + message);
}
}
}
注意事项
- WebSocket 连接需要支持 WebSocket 的服务器(如 Tomcat 8+、Jetty 9+)。
- 在生产环境中,建议添加心跳机制和超时处理。
- 对于高并发场景,考虑使用异步发送(
getAsyncRemote())而非同步发送(getBasicRemote())。
以上方法涵盖了 Java 中 WebSocket 的基本使用场景,可以根据实际需求进一步扩展功能。






