springBoot实现websocket
使用方式使用springBoot注解 @ServerEndpoint 实现websocket依赖引入<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></depend
·
-
使用方式
使用springBoot注解 @ServerEndpoint 实现websocket -
依赖引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
注册ServerEndpointExporter bean
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
-
建立websocket链接
import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @ServerEndpoint(value = "/websocketTest/{userId}") @Component public class MyWebSocket { public static ConcurrentHashMap<String, Set<Session>> sessionMap = new ConcurrentHashMap<>(); /** * 建立websocket连接 */ @OnOpen public void onOpen(@PathParam("userId") String userId, Session session) { if (CollectionUtils.isEmpty(sessionMap.get(userId))) { clearSocket(); sessionMap.put(userId, new HashSet<>()); } sessionMap.get(userId).add(session); } /** * 连接关闭调用的方法 */ @OnClose public void onClose(Session session) { } /** * 收到消息 * * @param message */ @OnMessage public void onMessage(String message, Session session) throws IOException { session.getBasicRemote().sendText(message); } /** * 发生错误时调用 */ @OnError public void onError(Session session, Throwable error) { error.printStackTrace(); } public void broadcastMessage(String response, Set<Session> sessionSet) { WebSocketBroadcaster.broadcastMessage(response, sessionSet); } //清理session已经全部关闭的会话集合 private void clearSocket() { for (String key : sessionMap.keySet()) { if (CollectionUtils.isEmpty(sessionMap.get(key))) { sessionMap.remove(key); } else { Iterator<Session> iterator = sessionMap.get(key).iterator(); while (iterator.hasNext()) { if(!iterator.next().isOpen()) { iterator.remove(); } } } } } }
-
测试:测试地址 :http://www.websocket-test.com/

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)