websocket构造方法注入方法

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);
    }
}

说明:

  1. 注解
    • @Component 是Spring的组件注解,用于将该类纳入Spring容器管理。
    • @ServerEndpoint("/iat") 定义了WebSocket服务的端点路径,前端连接时需与此路径匹配。
  2. 生命周期方法
    • @OnOpen 修饰的 onOpen 方法在WebSocket连接建立成功时触发,记录会话信息。
    • @OnMessage 修饰的 onMessage 方法用于接收前端发送的消息,这里简单示例了消息接收和回复逻辑,实际应用中需按业务解析和处理音频相关数据。
    • @OnClose 修饰的 onClose 方法在连接关闭时执行,记录关闭信息。
    • @OnError 修饰的 onError 方法用于捕获WebSocket通信过程中的错误并记录日志。
  3. 依赖 :代码中涉及到日志slf4j、JSON处理com.alibaba.fastjson等,需在项目pom.xml(Maven项目)或build.gradle(Gradle项目)中添加对应依赖。同时IatCapacity类需确保路径正确引入。
相关推荐
zhao3266857514 小时前
静态IP代理固定IP与动态IP的根本差异,账号操作安全性如何体现
网络·网络协议·tcp/ip
淼澄研学10 小时前
Kimi API黑产倒卖技术解析与Python合规接入指南
开发语言·网络·python
SendTomo11 小时前
P2P文件传输工具对比:SendTomo vs send.wang
javascript·网络协议·webrtc·html5·p2p
qyyyyy57011 小时前
英文技术标准和协议规范怎么读?RFC、接口规范与安全标准 PDF 翻译流程
网络协议·网络安全·机器翻译·csrf·技术美术
无锡耐特森11 小时前
Profinet转ModbusTCP协议网关:数字化工厂跨协议互联
网络
MartinYeung512 小时前
[论文学习]ProAct:针对LLM越狱的主动防禦框架
网络·学习·安全
发量惊人的中年网工12 小时前
中小企业网络管理进阶:从设备堆叠到统一管理
服务器·网络·安全·网络安全·php·制造
workflower13 小时前
案例 :某交通厅基于AI技术的智能安全运营实践
网络·人工智能·安全·设计模式·机器人
SendTomo13 小时前
WebRTC文件互传工具实测对比
javascript·网络·webrtc·html5·p2p
运维全栈笔记13 小时前
致远 OA HTTPS 配置避坑指南
网络协议·http·https