mitao
2025-02-10 05c1b69b9a694cf99e9f07f12ebf034cb2450f5f
websocket改造
4个文件已修改
47 ■■■■ 已修改文件
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/WebSocketController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketServer.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/websocket/WebSocketUsers.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
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();
    }
}
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);
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);
    }
}