用过websocket吗? 用过的 说说在什么场景下用的? 曾经有这么一个场景...,前端最开始是用轮询做的,我去了之后给改成了websocket,我是这么实现的... 相信很多前后端的小伙伴都被问过websocket,今天就来盘一盘websocket。什么是websocket 概念的东西我就不讲了,一言概之,websocket就是支持服务端向客户端发消息的技术。Springboot怎么集成 这是本文的重点。 pom引依赖编写ServerEndPoint,前端连接点@Slf4j @ServerEndpoint(value = "/test/{sid}") @Component public class WebsocketEndPoint { /** * 记录当前在线连接数 */ private static final AtomicInteger onlineCount = new AtomicInteger(0); /** * 连接建立成功调用的方法 */ @OnOpen public void onOpen(Session session, @PathParam("sid") String sid) { session.setMaxIdleTimeout(1000 * 10); onlineCount.incrementAndGet(); // 在线数加1 WebsocketSessionHelper.add(sid, session); } /** * 连接关闭调用的方法 */ @OnClose public void onClose(Session session, @PathParam("sid") String sid) { WebsocketSessionHelper.del(sid); onlineCount.decrementAndGet(); // 在线数减1 } /** * 收到客户端消息后调用的方法 * * @param message 客户端发送过来的消息 */ @OnMessage public void onMessage(String message, Session session) throws IOException { session.getBasicRemote().sendText(message.concat("666"));// 回复消息 } @OnError public void onError(Session session, Throwable e) { log.error("发生错误", e); } } 注意到我使用了一个Helper类,这个类用来存储和反查Session。这样在其他业务方法里面,可以灵活的根据sid找到Session,操作Session。@Slf4j public class WebsocketSessionHelper { private static final ConcurrentHashMap org.springframework.boot spring-boot-starter-websocketsessionMap = new ConcurrentHashMap<>(); public static void add(String sid, Session session) { sessionMap.put(sid, session); log.info("添加{}。当前sessionMap总量{}", sid, sessionMap.size()); } public static void del(String sid) { sessionMap.remove(sid); log.info("移除{} 当前session总量{}", sid, sessionMap.size()); } public static void sendMessage(String sid, String message) { Session session = sessionMap.get(sid); if (session == null) { log.error("session=null sid={}", sid); return; } if (!session.isOpen()) { log.error("session is closed sid={}", sid); sessionMap.remove(sid); return; } try { session.getBasicRemote().sendText(message); } catch (Exception e) { log.error("发消息失败 sid={}", sid); } } } 再写一个方法用来调用SessionHelper @GetMapping("sendMessage") public void sendMessage(@RequestParam String sid, @RequestParam String message) { WebsocketSessionHelper.sendMessage(sid, message); }前端JS怎么集成 关键的代码是websocket的几个操作,onopen,onmessage,onclose等等。 test WebSocket 好了,代码都在上面了,效果图我就不贴了,欢迎大家跑一跑这个例子,提提问题