后端代码
服务配置类
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
webSocket 业务类
@ServerEndpoint(value = "/client")
@Component
@Slf4j
public class CustomerPhonePushSocket {
// 静态变量,用来记录当前在线连接数。应该设计成线程安全的
private static int onlineCount = 0;
// concurrent包的线程安全Set,用来存放每个客户端对应的MyWebsocket对象
private static CopyOnWriteArraySet<CustomerPhonePushSocket> wsClientMap = new CopyOnWriteArraySet<>();
// 与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
/**
* 链接成功调用此方法
* @param applyId
* @param session
*/
@OnOpen
public void onOpen(@PathParam("applyId")String applyId,Session session){
this.session = session;
wsClientMap.add(this);
addOnlineCount();
log.info(session.getId()+"有新链接加入,当前链接数为:" + wsClientMap.size());
}
/**
* 关闭链接
*/
@OnClose
public void onClose(){
wsClientMap.remove(this);
subOnlineCount();
log.info("有链接断开,当前链接数为:" + wsClientMap.size());
}
/**
* 收到客户端的消息
* @param message
* @param session
*/
@OnMessage
public void onMessage(String message,Session session) throws IOException {
log.info("来自终端的消息:" + message);
mess