java
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
// 假设IatCapacity是你项目中定义的相关类,需确保路径正确
import com.example.IatCapacity;
@Component
@ServerEndpoint("/iat")
public class ASRWebSocketServer {
private static final Logger log = LoggerFactory.getLogger(ASRWebSocketServer.class);
private Session session;
private static Map<String, String> SOCKET_DAT_MAP = new HashMap<>();
private static IatCapacity iat;
@Resource
public void setIat(IatCapacity iatCapacity) {
this.iat = iatCapacity;
log.info("iat==>{}", com.alibaba.fastjson.JSONObject.toJSONString(iat));
}
// 连接建立成功调用的方法
@OnOpen
public void onOpen(Session session) {
this.session = session;
log.info("WebSocket连接已建立,会话ID: {}", session.getId());
}
// 收到客户端消息时调用的方法
@OnMessage
public void onMessage(String message, Session session) {
log.info("收到客户端消息: {}", message);
// 这里可以添加对消息的处理逻辑,比如解析JSON,提取音频数据等
// 假设message是符合前端发送格式的JSON字符串,可进行如下解析
// com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(message);
// String audioBase64 = jsonObject.getString("audio");
// int status = jsonObject.getIntValue("status");
// 后续可根据业务需求处理音频数据和状态值
try {
// 简单示例:给客户端回复消息
session.getBasicRemote().sendText("已收到你的消息");
} catch (IOException e) {
log.error("发送消息失败", e);
}
}
// 连接关闭调用的方法
@OnClose
public void onClose(Session session) {
log.info("WebSocket连接已关闭,会话ID: {}", session.getId());
}
// 发生错误时调用的方法
@OnError
public void onError(Session session, Throwable error) {
log.error("WebSocket发生错误", error);
}
}
说明:
- 注解 :
@Component
是Spring的组件注解,用于将该类纳入Spring容器管理。@ServerEndpoint("/iat")
定义了WebSocket服务的端点路径,前端连接时需与此路径匹配。
- 生命周期方法 :
@OnOpen
修饰的onOpen
方法在WebSocket连接建立成功时触发,记录会话信息。@OnMessage
修饰的onMessage
方法用于接收前端发送的消息,这里简单示例了消息接收和回复逻辑,实际应用中需按业务解析和处理音频相关数据。@OnClose
修饰的onClose
方法在连接关闭时执行,记录关闭信息。@OnError
修饰的onError
方法用于捕获WebSocket通信过程中的错误并记录日志。
- 依赖 :代码中涉及到日志
slf4j
、JSON处理com.alibaba.fastjson
等,需在项目pom.xml
(Maven项目)或build.gradle
(Gradle项目)中添加对应依赖。同时IatCapacity
类需确保路径正确引入。