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();
 }
}
目录
相关文章
|
5月前
|
存储 BI Shell
Doris基础-架构、数据模型、数据划分
Apache Doris 是一款高性能、实时分析型数据库,基于MPP架构,支持高并发查询与复杂分析。其前身是百度的Palo项目,现为Apache顶级项目。Doris适用于报表分析、数据仓库构建、日志检索等场景,具备存算一体与存算分离两种架构,灵活适应不同业务需求。它提供主键、明细和聚合三种数据模型,便于高效处理更新、存储与统计汇总操作,广泛应用于大数据分析领域。
574 2
|
5月前
|
人工智能 安全 Java
Nacos 3.0:从微服务治理到AI服务治理的跃迁
Nacos 3.0:从微服务治理到AI服务治理的跃迁
346 5
|
5月前
|
人工智能 自然语言处理 安全
Nacos 3.0:微服务与AI融合的新一代动态治理平台
Nacos 3.0:微服务与AI融合的新一代动态治理平台
329 2
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
1751 0
|
消息中间件 存储 监控
消息队列 MQ使用问题之客户端重启后仍然出现broker接收消息不均匀,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
1396 0
|
安全 Java Spring
Spring Authorization Server 快速入门
Spring Authorization Server 快速入门
1009 0
Spring Authorization Server 快速入门

热门文章

最新文章