想学做网站学什么教程,社区网站建设工作职责,菏泽网站建设电话,哪个网站做签约设计师比较好系列文章目录
一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地址一、效果演示二、引入依赖…系列文章目录
一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地址一、效果演示二、引入依赖三、WebSocketConfig四、SessionWrap五、WebSocketServer 代码下载地址
SpringBoot整合WebSocket【代码】 一、效果演示
测试链接 二、引入依赖
!-- websocket --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-websocket/artifactIdversion2.1.1.RELEASE/version
/dependency三、WebSocketConfig
Configuration
public class WebSocketConfig {Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}四、SessionWrap SessionWrap 可根据具体需求自定义 Data
public class SessionWrap {private String from; // 连接Idprivate String type; // 来凝结类型private Session session;private Date lastTime;
}五、WebSocketServer
Slf4j
Component
ServerEndpoint(value /api/websocket/{from}/{type})
public class WebSocketServer {Autowiredprivate MessageService messageService;public static WebSocketServer webSocketServer;// 所有的连接会话private static CopyOnWriteArraySetSessionWrap sessionList new CopyOnWriteArraySet();private String from;private String type;PostConstructpublic void init() {webSocketServer this;webSocketServer.messageService this.messageService;}/*** author Lee* date 2023/7/18 13:57* description 创建连接*/OnOpenpublic void onOpen(Session session, PathParam(value from) String from, PathParam(value type) String type) {this.from from;this.type type;try {// 遍历list如果有会话更新如果没有创建一个新的for (SessionWrap item : sessionList) {if (item.getFrom().equals(from) item.getType().equals(type)) {item.setSession(session);item.setLastTime(new Date());log.info(【websocket消息】更新连接总数为: sessionList.size());return;}}SessionWrap sessionWrap new SessionWrap();sessionWrap.setFrom(from);sessionWrap.setType(type);sessionWrap.setSession(session);sessionWrap.setLastTime(new Date());sessionList.add(sessionWrap);log.info(【websocket消息】有新的连接总数为: sessionList.size());} catch (Exception e) {log.info(【websocket消息】连接失败错误信息 e.getMessage());}}/*** author Lee* date 2023/7/18 13:57* description 关闭连接*/OnClosepublic void onClose() {try {sessionList.removeIf(item - item.getFrom().equals(from) item.getType().equals(type));log.info(【websocket消息】连接断开总数为: sessionList.size());} catch (Exception e) {log.info(【websocket消息】连接断开失败错误信息 e.getMessage());}}/*** author Lee* date 2023/7/18 14:04* description 发送消息*/OnMessagepublic void onMessage(String message, Session session) {try {// 对消息进行处理JSONObject r webSocketServer.messageService.insertMessage(message);String userId r.getString(userId);for (SessionWrap item : sessionList) {// 发送消息的判断逻辑可根据需求修改if (item.getFrom().equals(userId) item.getType().equals(test)) {item.getSession().getBasicRemote().sendText(r.toJSONString());log.info(【websocket消息】发送消息成功: r.toJSONString());}}} catch (Exception e) {log.info(【websocket消息】发送消息失败错误信息 e.getMessage());}}OnErrorpublic void onError(Session session, Throwable error) {log.error(用户错误,原因:error.getMessage());error.printStackTrace();}}