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类需确保路径正确引入。
相关推荐
艾莉丝努力练剑1 小时前
OpenCode AI 编程:Ubuntu 24.04 环境安装与使用指南
linux·服务器·网络·人工智能·tcp/ip·ubuntu
谷雪_6582 小时前
Linux 网络命名空间:从内核原理到企业级容器网络架构全景实战
linux·网络·架构
liulilittle2 小时前
KCC 拥塞控制算法缺陷修复记录(26/07/05)
网络·tcp/ip·计算机网络·c·信息与通信·tcp·通信
Tian_Hang2 小时前
Eclipse Ditto 的权限策略
java·服务器·前端·网络·ide·ubuntu·eclipse
ai生成式引擎优化技术2 小时前
从知识连接到智能组织:WSaiOS认知网络的理论框架与系统设计摘要
网络·python·plotly·django·pygame
冰暮流星3 小时前
flask之http请求方法
网络·网络协议·http
K成长日志4 小时前
BLE协议之设备地址
网络·物联网·网络协议·嵌入式·蓝牙·ble
广州市顺风搬家服务有限公司4 小时前
实验室搬迁科普专业流程防护标准与合规核心要点
网络·其他·安全
liulilittle4 小时前
KCC 边界缺陷深度分析:六问题根源与解决方案
网络·网络协议·tcp/ip·计算机网络·信息与通信·ip·通信
BS_Li6 小时前
【Linux网络编程】NAT、代理服务、内网穿透
linux·网络·智能路由器