spring-websocket 和 tomcat-embed-websocket 有什么区别,如何使用

`spring-websocket` 和 `tomcat-embed-websocket` 都是用于支持 WebSocket 协议的库,但它们有不同的用途和实现方式。

  1. **Spring WebSocket (`spring-websocket`)**:
  • `spring-websocket` 是 Spring Framework 的一部分,它提供了一种在 Spring 应用程序中处理 WebSocket 连接的方式。

  • 它允许您在 Spring 应用程序中轻松地创建 WebSocket 端点,并通过 Spring MVC 控制器或消息代理处理来自客户端的消息。

  • Spring WebSocket 提供了高级功能,如消息拦截器、消息转换器、心跳检测等,使得开发 WebSocket 应用程序更加灵活和方便。

  • Spring WebSocket 可以与 Spring 的其他模块(如 Spring Security、Spring Boot)无缝集成,提供全面的解决方案。

  1. **Tomcat Embed WebSocket (`tomcat-embed-websocket`)**:
  • `tomcat-embed-websocket` 是 Apache Tomcat 的一部分,它提供了 Tomcat 内置的 WebSocket 实现。

  • 它允许您在 Tomcat 服务器中创建和管理 WebSocket 端点,并直接使用 Tomcat 提供的 API 来处理 WebSocket 连接。

  • Tomcat Embed WebSocket 通常用于基于 Tomcat 的应用程序,或者通过嵌入式 Tomcat 启动的 Spring Boot 应用程序。

总的来说,`spring-websocket` 更适合于使用 Spring 框架开发的应用程序,它提供了更丰富的功能和更好的集成性。而 `tomcat-embed-websocket` 则更适合于直接在 Tomcat 服务器中开发 WebSocket 应用程序,或者与 Tomcat 集成的场景。

代码示例:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

import org.springframework.web.socket.CloseStatus;

import org.springframework.web.socket.TextMessage;

import org.springframework.web.socket.WebSocketSession;

import org.springframework.web.socket.handler.TextWebSocketHandler;

@Component

public class WebSocketHandler extends TextWebSocketHandler {

private Logger logger = LoggerFactory.getLogger(this.getClass());

@Override

public void afterConnectionEstablished(WebSocketSession session) throws Exception {

// 在线人数加1

WebSocketUtil.countAtomic.incrementAndGet();

String userId = session.getAttributes().get("userId").toString();

logger.info("用户:" + userId + "已经上线");

WebSocketUtil.clients.put(userId, session);

logger.info("连接打开, 当前连接数:{},当前在线人数:{}", WebSocketUtil.countAtomic.get(), WebSocketUtil.clients.size());

}

@Override

public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {

logger.info("收到客户端的消息:" + message.getPayload());

}

@Override

public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {

// 在线人数减一

WebSocketUtil.countAtomic.decrementAndGet();

String userId = session.getAttributes().get("userId").toString();

WebSocketUtil.clients.remove(userId);

logger.info("连接关闭, 当前连接数:{},当前在线人数:{}", WebSocketUtil.countAtomic.get(), WebSocketUtil.clients.size());

}

@Override

public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {

logger.info("服务端发生了错误" + exception.getMessage());

}

}

相关推荐
晚霞的不甘1 分钟前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
寄存器漫游者1 小时前
Linux 软件编程 - IO 编程
linux·运维·spring
我真会写代码2 小时前
SSM(指南一)---Maven项目管理从入门到精通|高质量实操指南
java·spring·tomcat·maven·ssm
vx_Biye_Design2 小时前
【关注可免费领取源码】房屋出租系统的设计与实现--毕设附源码40805
java·spring boot·spring·spring cloud·servlet·eclipse·课程设计
DN金猿2 小时前
接口路径正确,请求接口却提示404
java·tomcat
青春给了代码4 小时前
基于WebSocket实现在线语音(实时+保存)+文字双向传输完整实现
网络·websocket·网络协议
独断万古他化4 小时前
【SSM开发实战:博客系统】(三)核心业务功能开发与安全加密实现
spring boot·spring·mybatis·博客系统·加密
若鱼19195 小时前
SpringBoot4.0新特性-Observability让生产环境更易于观测
java·spring
跳动的梦想家h6 小时前
环境配置 + AI 提效双管齐下
java·vue.js·spring
独断万古他化7 小时前
【Spring 原理】Bean 的作用域与生命周期
java·后端·spring