| | |
| | | * 记录当前在线连接数 |
| | | */ |
| | | public static final Map<String, Session> sessionMap = new ConcurrentHashMap<>(); |
| | | |
| | | /** |
| | | * 连接建立成功调用的方法 |
| | | */ |
| | |
| | | // {"users": [{"username": "zhang"},{ "username": "admin"}]} |
| | | sendAllMessage(JSONUtil.toJsonStr(result)); // 后台发送消息给所有的客户端 |
| | | } |
| | | |
| | | /** |
| | | * 连接关闭调用的方法 |
| | | */ |
| | |
| | | sessionMap.remove(username); |
| | | log.info("有一连接关闭,移除username={}的用户session, 当前在线人数为:{}", username, sessionMap.size()); |
| | | } |
| | | |
| | | /** |
| | | * 收到客户端消息后调用的方法 |
| | | * 后台收到客户端发送过来的消息 |
| | | * onMessage 是一个消息的中转站 |
| | | * 接受 浏览器端 socket.send 发送过来的 json数据 |
| | | * |
| | | * @param message 客户端发送过来的消息 |
| | | */ |
| | | @OnMessage |
| | |
| | | // {"to": "admin", "text": "聊天文本"} |
| | | if ("heartBeat".equals(toUsername)) { |
| | | log.info("心跳"); |
| | | }else if ("all".equals(toUsername)) { |
| | | } else if ("all".equals(toUsername)) { |
| | | sendAllMessage(text); |
| | | }else { |
| | | } else { |
| | | Session toSession = sessionMap.get(toUsername); // 根据 to用户名来获取 session,再通过session发送消息文本 |
| | | if (toSession != null) { |
| | | // 服务器端 再把消息组装一下,组装后的消息包含发送人和发送的文本内容 |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | @OnError |
| | | public void onError(Session session, Throwable error) { |
| | | log.error("发生错误"); |
| | | error.printStackTrace(); |
| | | } |
| | | |
| | | /** |
| | | * 服务端发送消息给客户端 |
| | | */ |
| | |
| | | log.error("服务端发送消息给客户端失败", e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 服务端发送消息给所有客户端 |
| | | */ |