SpringBoot整合websocket简单示例
依赖
<!-- springboot整合websocket --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
也使用了 如果引入不需要引入了
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency>
EndpointConfigure.java
import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import javax.websocket.server.ServerEndpointConfig; /** */ public class EndpointConfigure extends ServerEndpointConfig.Configurator implements ApplicationContextAware { private static volatile BeanFactory context; @Override public <T> T getEndpointInstance(Class<T> clazz) throws InstantiationException { return context.getBean(clazz); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { EndpointConfigure.context = applicationContext; } }
WebSocketConfigure.java
import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Configuration @Slf4j public class WebSocketConfigure { @Bean public EndpointConfigure newConfigure() { return new EndpointConfigure(); } @Bean public ServerEndpointExporter serverEndpointExporter() { log.info("===========开启WebSocket支持==========="); return new ServerEndpointExporter(); } }
测试demo
IndexWebSocket.java
import com.example.websocket.config.EndpointConfigure; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * * @author yvioo */ @ServerEndpoint(value = "/index", configurator = EndpointConfigure.class) @Component
@Scope("prototype") //多例 @Slf4j public class IndexWebSocket { private static Map<String, IndexWebSocket> prototypeMap = new ConcurrentHashMap<>(); /** * 与某个客户端的连接会话,需要通过它来给客户端发送数据 */ private Session session; /** * 可以直接注入,这里没有这个类 只是示例 */ @Autowired private UserMapper userMapper; /** * 连接建立成功调用的方法 */ @OnOpen public void onOpen(Session session) { this.session=session; log.info("连接" ); } /** * 连接关闭调用的方法 */ @OnClose public void onClose() { log.info("退出" ); } /** * 收到客户端消息 * @param message 客户端发送过来的消息 */ @OnMessage public void onMessage(String message, Session session) { log.info("设备连接" ); } /** * @param session * @param error */ @OnError public void onError(Session session, Throwable error) { log.error("错误: {}", error.getMessage()); } /** *服务器主动推送消息 */ public void sendMessage(String message) { synchronized (this.session) { try { this.session.getBasicRemote().sendText(message); } catch (IOException e) { e.printStackTrace(); } } } }
-----------------------有任何问题可以在评论区评论,也可以私信我,我看到的话会进行回复,欢迎大家指教------------------------
(蓝奏云官网有些地址失效了,需要把请求地址lanzous改成lanzoux才可以)
分类:
JAVA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了