SpringBoot整合WebSocket


1: POM引入依赖



org.springframework.boot
spring-boot-starter-websocket
 



2:创建配置文件

@Configuration
public class WebSocketCfg {

@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}


3:创建websocket业务
@Slf4j
@ServerEndpoint("/test/ws")
@Component
public class MyWebSocket {

/** 记录当前在线连接数 */
private static AtomicInteger onlineCount = new AtomicInteger(0);

/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(Session session) {
onlineCount.incrementAndGet(); // 在线数加1
log.info("有新连接加入:{},当前在线人数为:{}", session.getId(), onlineCount.get());
}

/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose(Session session) {
onlineCount.decrementAndGet(); // 在线数减1
log.info("有一连接关闭:{},当前在线人数为:{}", session.getId(), onlineCount.get());
}

/**
* 收到客户端消息后调用的方法
*
* @param message
* 客户端发送过来的消息
*/
@OnMessage
public void onMessage(String message, Session session) {
log.info("服务端收到客户端[{}]的消息:{}", session.getId(), message);
this.sendMessage("Hello, " + message, session);
}

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

/**
* 服务端发送消息给客户端
*/
private void sendMessage(String message, Session toSession) {
while (true) {
try {
log.info("服务端给客户端[{}]发送消息{}", toSession.getId(), message);
toSession.getBasicRemote().sendText(message);
Thread.sleep(1000);
} catch (Exception e) {
log.error("服务端发送消息给客户端失败:{}", e);
break;
}
}
}

}



4:前端建立websocket连接
HTML>


My WebSocket<span style="color: rgba(232, 191, 106, 1)">



id="text" type="text" />


id="message">