阅读:2928回复:0
org.springframework.web.socket.server.standard不存在?springboot整合websocket部署报错:Error creating bean with name 'serverEndpointExporter',org.springframework.web.socket.server.standard找不到? 第一步 加入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> 第二步 @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } } 第三步 **/ @Component @ServerEndpoint(value = “/ws/csrpmed/websocket/{userId}”) public class MyWebSocket extends BaseController { private static final Logger logger = LoggerFactory.getLogger(MyWebSocket.class); // 以用户名为key,Session为值保存 public static final Map<String, Session> clients = new ConcurrentHashMap<>(); private Gson gson = new Gson(); /** * 收到客户端消息后调用的方法 * @param message 消息内容 * @param session */ @OnMessage public void onMessage(String message, Session session) { } /** * 连接发生错误时的调用方法 * @param session * @param error */ @OnError public void onError(Session session, Throwable error) { try { //发送对象 String from = session.getPathParameters().get(Util.USERNAME); logger.error("---------------------与{}的连接发生错误---------------------",from); } catch (Exception e) { //logger.error("聊天异常!", e); //重试连接会一直刷屏 } } /** * 建立连接 */ @OnOpen public void onOpen(@PathParam(Util.USERID) String userId, Session session) { try { logger.info("用户聊天连接入参 {}",userId); //将用户添加到容器 clients.put(userId, session); addOnlineCount(); //在线数加1 logger.info("用户聊天连接成功用户id为 {}",userId); } catch (Exception e) { //logger.error("聊天连接异常", e); //重试连接会一直刷屏 } } /** * 连接关闭 */ @OnClose public void onClose(Session session) { try { logger.info("用户关闭连接入参 {}", session); String username = session.getPathParameters().get(Util.USERNAME); // 移除容器中存储的用户数据以及发消息通知其他用户 if (clients.get(username) != null) { clients.remove(username); subOnlineCount(); //在线数减1 } logger.info("用户 {} 退出聊天剩余连接 :{}", username, clients); } catch (Exception e) { logger.error("用户退出聊天异常", e); } } // 推送消息给某个人 public static void sendMessageTo(String message, String to) { Session session = clients.get(to); if (session != null) { session.getAsyncRemote().sendText(message); } } // 推送消息给某个人,非异步 public static Session sendMessageToSynchronized(String message, String to) { Session session = clients.get(to); if (session != null) { try { session.getBasicRemote().sendText(message,true); logger.info("同步发送消息成功"); } catch (IOException e) { e.printStackTrace(); logger.error("同步发送消息失败"+e); } } return session; } public static synchronized void addOnlineCount() { MyWebSocket.onlineCount++; } public static synchronized void subOnlineCount() { MyWebSocket.onlineCount--; } } 按着这样来依然会出现这个问题 第一步中WebSocketConfig这个类找不到? org.springframework.web.socket.server.standard 开始在网上搜了… 1注释第一步中的类. 2去掉第三步的@Component 但是运行了,依然报错… 开始自己以为是,jar包没下载全,然后清空了maven本地仓库,重新下载,还是如此… 开始以为是自己代码写的问题,请求小组大佬在他电脑上可以运行… 我猜测是环境问题…没错就是这样. 首先重启idea…不行 重启电脑…不行… 重新拉代码…不行 最后抱着侥幸的态度换了个maven(idea自带的)… 结果奇迹般的运行了… 然后我又换回自己曾经那个maven… 结果可以… 好吧,总算是圆满解决了,亲测有效果,有知道原理大佬,可以在评论区留言,谢谢各位!!! ———————————————— 版权声明:本文为CSDN博主「叫我无言」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/fewefgds/article/details/123065043 |
|