标签 ws 下的文章

springboot websocket
WebScocketConfig.java

@Configuration
public class WebScocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}
````


<!--more-->

WebSocketServer.java

@ServerEndpoint("/websocket/{sid}")
@Component
public class WebSocketServer {

private static Logger log = LoggerFactory.getLogger(WebSocketServer.class);
private static final AtomicInteger onlineCount = new AtomicInteger(0);
// concurrent包的线程安全Set,用来存放每个客户端对应的Session对象。
private static CopyOnWriteArraySet<Session> setSession = new CopyOnWriteArraySet<Session>();

/**
 * 连接建立成功调用的方法
 */
@OnOpen
public void onOpen(Session session, @PathParam("sid") String sid) {
    setSession.add(session);
    int cnt = onlineCount.incrementAndGet(); // 在线数加1
    log.info("有连接加入,当前连接数为:{}{}", cnt, sid);
    System.out.println("---" +sid);
    SendMessage(session, "连接成功");
}

/**
 * 连接关闭调用的方法
 */
@OnClose
public void onClose(Session session) {
    setSession.remove(session);
    int cnt = onlineCount.decrementAndGet();
    log.info("有连接关闭,当前连接数为:{}", cnt);
}

/**
 * 收到客户端消息后调用的方法
 *
 * @param message 客户端发送过来的消息
 */
@OnMessage
public void onMessage(String message, Session session) {
    log.info("来自客户端的消息:{}", message);
    SendMessage(session, "收到消息,消息内容:" + message);

}

@OnError
public void onError(Session session, Throwable error) {
    log.error("发生错误:{},Session ID: {}", error.getMessage(), session.getId());
    error.printStackTrace();
}

/**
 * 发送消息,实践表明,每次浏览器刷新,session会发生变化。
 *
 * @param session
 * @param message
 */
public static void SendMessage(Session session, String message) {
    try {
        session.getBasicRemote().sendText(String.format(message));
    } catch (IOException e) {
        log.error("发送消息出错:{}", e.getMessage());
        e.printStackTrace();
    }
}

/**
 * 群发消息
 *
 * @param message
 * @throws IOException
 */
public static void BroadCastInfo(String message) throws IOException {
    for (Session session : setSession) {
        if (session.isOpen()) {
            SendMessage(session, message);
        }
    }
}

/**
 * 指定Session发送消息
 *
 * @param sessionId
 * @param message
 * @throws IOException
 */
public static void SendMessage(String message, String sessionId) throws IOException {
    Session session = null;
    for (Session s : setSession) {
        if (s.getId().equals(sessionId)) {
            session = s;
            break;
        }
    }
    if (session != null) {
        SendMessage(session, message);
    } else {
        log.warn("没有找到你指定ID的会话:{}", sessionId);
    }
}

}

- 阅读剩余部分 -