WebApplicationType.REACTIVE 的webSocket

简介: 该代码包含WebSocket通信所需的通用请求体、响应类及配置类。`WebSocketRequest`封装客户端请求,含操作类型与数据;`WebSocketResponse`定义服务端响应结构,并提供成功/失败方法;`ConnectDTO`用于连接类型标识;`WebFluxWebSocketConfig`完成WebSocket处理器映射与适配器配置,支持响应式编程模型。

通用请求体类

@ApiModel("websocket请求消息")
public class WebSocketRequest<T> implements Serializable {
  private static final long serialVersionUID = 1L;

  /**
   * 参考:com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiBroadcastEventEnum;
   */
  private @NotNull(message = "业务操作类型不能为空") Integer aiBroadcastEventEnum;

  private T data;

  public T getRealData(Class<T> clazz) {
    if (this.data == null) {
      return null;
    } else {
      String jsonStr = JsonUtil.toJsonStr(this.data);
      return (T) JsonUtil.parseObject(jsonStr, clazz);
    }
  }

}

通用响应类

@Data
public class WebSocketResponse<T> implements Serializable {
  private static final long serialVersionUID = 1L;
  /**
   * 参考枚举:com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiBroadcastEventEnum
   */
  private Integer aiBroadcastEventEnum;
  private String code;
  private String msg;
  private T data;

  public static <T> Mono<WebSocketResponse<T>> ok(Integer eventEnum, T data) {
    WebSocketResponse<T> response = new WebSocketResponse<T>();
    response.setAiBroadcastEventEnum(eventEnum);
    response.setCode(RespStatusEnum.OK.getCode());
    response.setMsg(RespStatusEnum.OK.getMsg());
    response.setData(data);
    return Mono.just(response);
  }

  public static Mono<WebSocketResponse<Void>> ok(Integer eventEnum) {
    WebSocketResponse<Void> response = new WebSocketResponse<Void>();
    response.setAiBroadcastEventEnum(eventEnum);
    response.setCode(RespStatusEnum.OK.getCode());
    response.setMsg(RespStatusEnum.OK.getMsg());
    return Mono.just(response);
  }

  public static <T> Mono<WebSocketResponse<T>> fail(Integer eventEnum, RespStatusEnum status, String err) {
    WebSocketResponse<T> response = new WebSocketResponse<T>();
    response.setAiBroadcastEventEnum(eventEnum);
    response.setCode(status.getCode());
    response.setMsg(err);
    return Mono.just(response);
  }

}

连接类型类

@Accessors(chain = true)
public class ConnectDTO {

  /**
   * 连接类型 参考枚举:com.mcmcnet.gacne.basic.service.common.pojo.enumeration.screen.AiBroadcastEventEnum
   */
  private Integer type;

}

配置类

public class WebFluxWebSocketConfig {

 /** 让 Spring 注入已经带依赖的 Handler */
 @Bean
 public HandlerMapping webSocketMapping(WebSocketReceivedHandler handler) {
   return new SimpleUrlHandlerMapping(
           Map.of("/api/xxx/ws", handler),   // 用注入的 handler
           -1
   );
 }

 @Bean
 public WebSocketHandlerAdapter handlerAdapter() {
   return new WebSocketHandlerAdapter();
 }
}
目录
相关文章
|
12月前
|
存储 BI Shell
Doris基础-架构、数据模型、数据划分
Apache Doris 是一款高性能、实时分析型数据库,基于MPP架构,支持高并发查询与复杂分析。其前身是百度的Palo项目,现为Apache顶级项目。Doris适用于报表分析、数据仓库构建、日志检索等场景,具备存算一体与存算分离两种架构,灵活适应不同业务需求。它提供主键、明细和聚合三种数据模型,便于高效处理更新、存储与统计汇总操作,广泛应用于大数据分析领域。
1252 2
|
存储 搜索推荐 PyTorch
通义千问7B-基于本地知识库问答
上期,我们介绍了通义千问7B模型的微调+部署方式,但在实际使用时,很多开发者还是希望能够结合特定的行业知识来增强模型效果,这时就需要通过外接知识库,让大模型能够返回更精确的结果。
|
JavaScript 小程序 前端开发
uni-app入门:wxs基本使用
wxs(weixin script),是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。可以编写在 wxml 文件中的 标签内,或以 .wxs 为后缀名的文件内.
uni-app入门:wxs基本使用
|
12月前
|
人工智能 安全 Java
Nacos 3.0:从微服务治理到AI服务治理的跃迁
Nacos 3.0:从微服务治理到AI服务治理的跃迁
565 5
|
12月前
|
人工智能 自然语言处理 安全
Nacos 3.0:微服务与AI融合的新一代动态治理平台
Nacos 3.0:微服务与AI融合的新一代动态治理平台
660 2
|
消息中间件 测试技术 RocketMQ
消息队列 MQ产品使用合集之在异步发送消息函数sendMessage()中出现了错误,错误代码为-3,该如何解决
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
XML 人工智能 Java
注入Java Bean的方式
本文总结了 Spring Boot 中常见的 Bean 注入方式,包括字段注入(`@Autowired`)、构造器注入(推荐)、Setter 方法注入、`@Resource` 按名称注入、`@Bean` 定义复杂 Bean、`@Value` 注入配置值、XML 配置、`ApplicationContextAware` 手动获取 Bean 以及 JSR-330 的 `@Inject`。同时分析了 Setter 注入逐渐被淡化的原因,强调构造器注入的不可变性和安全性优势,并推荐结合 Lombok 简化代码。文章还提供了按需选择注解的建议和最佳实践,帮助开发者根据场景选择合适的依赖注入方式。
1187 49
|
Python
错误:/lib64/libc.so.6: version `GLIBC_2.14’ not found 解决办法
错误:/lib64/libc.so.6: version `GLIBC_2.14’ not found 解决办法
1508 0

热门文章

最新文章