嗨森逛服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hai-server/hai-service/src/main/java/com/hai/service/WebSocket.java

75 lines
2.4 KiB

package com.hai.service;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.test.context.junit4.SpringRunner;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
@Component
@SpringBootTest
@RunWith(SpringRunner.class)
@ServerEndpoint("/WebSocket/{userId}")
public class WebSocket {
private static Logger log = LoggerFactory.getLogger(WebSocket.class);
/**
* 在线用户,将其保存在set中,避免用户重复登录,出现多个session
*/
//concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象。
private static ConcurrentHashMap<String, Session> USERS = new ConcurrentHashMap<>();
//连接时执行
@OnOpen
public void onOpen(@PathParam("userId") String userId, Session session) throws IOException {
if (userId != null) {
USERS.put(userId , session);
}
System.out.println("【WebSocket消息】有新的连接" + userId);
}
//关闭时执行
@OnClose
public void onClose() {
System.out.println("【WebSocket消息】断开连接");
}
//收到消息时执行
@OnMessage
public void onMessage(String message) throws IOException {
log.debug("【WebSocket消息】收到客户端发来的信息,总数:{}", message);
}
//连接错误时执行
@OnError
public void onError(Throwable error) {
log.debug("【WebSocket消息】收到客户端发来的信息,总数:{}");
error.printStackTrace();
}
// 给制定用户发送信息
public void SenderMessage(String userId , String message) {
Session sessionUser = USERS.get(userId);
try {
sessionUser.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
}
}
// 断开制定用户
public void closUser(String userId ) {
USERS.remove(userId);
System.out.println("【WebSocket消息】断开连接");
}
}