From 05c1b69b9a694cf99e9f07f12ebf034cb2450f5f Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 10 二月 2025 10:15:38 +0800 Subject: [PATCH] websocket改造 --- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java | 15 ++++++++++++++- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java | 9 ++++++--- ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java | 10 ++++++---- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java | 13 +++++++++++++ 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java index 8ca2c35..ba48a02 100644 --- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java +++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java @@ -195,7 +195,8 @@ sysUser.setNickName("白金用户"); sysUser.setUserType("03"); sysUser.setPhonenumber(response.getOpenId()); - sysUser.setAvatar("https://jyzx-obs.obs.cn-sccd1.ctyun.cn/d41508d822cb4b7896aaa1bb56e6167f.png"); + sysUser.setAvatar( + "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/ca8552a34fb64d4d846afa1b5b173cf9.png"); String password = "123456"; sysUser.setPassword(SecurityUtils.encryptPassword(password)); sysUser = sysUserService.registerUser(sysUser).getData(); @@ -207,7 +208,8 @@ member.setDelFlag(0); member.setNickname("白酒用户"); member.setPhone(appMiniLoginDto.getPhone()); - member.setAvatar("https://jyzx-obs.obs.cn-sccd1.ctyun.cn/d41508d822cb4b7896aaa1bb56e6167f.png"); + member.setAvatar( + "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/ca8552a34fb64d4d846afa1b5b173cf9.png"); member.setZfbOpenid(response.getOpenId()); this.save(member); appMiniLoginVo.setZfbuserid(response.getUserId()); @@ -259,7 +261,7 @@ sysUser.setNickName("白金用户"); sysUser.setUserType("03"); sysUser.setAvatar( - "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/d41508d822cb4b7896aaa1bb56e6167f.png"); + "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/ca8552a34fb64d4d846afa1b5b173cf9.png"); String password = "123456"; sysUser.setPassword(SecurityUtils.encryptPassword(password)); sysUser = sysUserService.registerUser(sysUser).getData(); @@ -271,7 +273,7 @@ member.setDelFlag(0); member.setNickname("白酒用户"); member.setAvatar( - "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/d41508d822cb4b7896aaa1bb56e6167f.png"); + "https://jyzx-obs.obs.cn-sccd1.ctyun.cn/ca8552a34fb64d4d846afa1b5b173cf9.png"); member.setWxUnionid(unionid); member.setPhone(appMiniLoginDto.getPhone()); member.setMiniOpenid(openid); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java index 8a721a0..f2194cf 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java @@ -40,4 +40,17 @@ WebSocketUsers.sendMessageToUsersByText(message); return R.ok(); } + + /** + * 通过用户id推送消息 + * @param type + * @param msg + * @return + */ + @GetMapping("/push-by-user-id/{userId}/{msg}") + public R<?> pushByUserId(@PathVariable("userId") Long userId, + @PathVariable("msg") String msg) { + WebSocketUsers.sendMessageToUserById(userId, msg); + return R.ok(); + } } \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java index ee679e8..edd6125 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java @@ -1,5 +1,6 @@ package com.ruoyi.system.websocket; +import com.ruoyi.common.core.utils.JwtUtils; import java.util.concurrent.Semaphore; import javax.websocket.OnClose; import javax.websocket.OnError; @@ -18,7 +19,7 @@ * @作者 ruoyi */ @Component -@ServerEndpoint("/websocket/message/{clientType}") +@ServerEndpoint("/websocket/message/{clientType}/{accessToken}") public class WebSocketServer { private static final Logger LOGGER = LoggerFactory.getLogger(WebSocketServer.class); @@ -26,7 +27,8 @@ private static Semaphore socketSemaphore = new Semaphore(socketMaxOnlineCount); @OnOpen - public void onOpen(Session session, @PathParam("clientType") Integer clientType) + public void onOpen(Session session, @PathParam("clientType") Integer clientType, + @PathParam("accessToken") String accessToken) throws Exception { boolean semaphoreFlag = false; semaphoreFlag = SemaphoreUtils.tryAcquire(socketSemaphore); @@ -36,7 +38,8 @@ "当前在线人数超过限制数:" + socketMaxOnlineCount); session.close(); } else { - WebSocketUsers.put(session.getId(), session, clientType); + String userId = JwtUtils.getUserId(accessToken); + WebSocketUsers.put(session.getId(), session, clientType, Long.parseLong(userId)); if (clientType == 1) { LOGGER.info("\n 用户端建立连接 - {}", session); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java index 9b162c2..0b2f9cf 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java @@ -20,11 +20,14 @@ private static Map<String, Session> USERS = new ConcurrentHashMap<>(); private static Map<String, Integer> USER_TYPES = new ConcurrentHashMap<>(); + // 保存用户id与session映射 + private static Map<String, Session> USER_ID_MAP = new ConcurrentHashMap<>(); - public static void put(String key, Session session, Integer clientType) + public static void put(String key, Session session, Integer clientType, Long userId) { USERS.put(key, session); USER_TYPES.put(key, clientType); + USER_ID_MAP.put(userId.toString(), session); } public static boolean remove(Session session) @@ -120,4 +123,14 @@ } } } + + /** + * 根据用户id进行点对点推送 + * @param userId 用户id + * @param message 消息内容 + */ + public static void sendMessageToUserById(Long userId, String message) { + Session session = USER_ID_MAP.get(userId.toString()); + sendMessageToUserByText(session, message); + } } -- Gitblit v1.7.1