springboot 集成websocket
websocket是javascript新增的一个特性,可以实现服务端主动推送消息到浏览器,通过一个长连接达到这个效果,而且还支持跨域。
1.引入依赖包
org.springframework.boot
spring-boot-starter-websocket
2.创建配置文件WebSocketConfig.java
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter () {
return new ServerEndpointExporter();
}
}
3.创建服务器接口文件WebSocketServer.java:
/**
* 前后端交互的类实现消息的接收推送(自己发送给自己)
*
* @ServerEndpoint(value = "/test/one") 前端通过此URI和后端交互,建立连接
*/
@Slf4j
@ServerEndpoint(value = "/test/one")
@Component
public class WebSocketServer {
/**
* 记录当前在线连接数
*/
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) throws InterruptedException {
log.info("服务端收到客户端[{}]的消息:{}", session.getId(), message);
for (int i = 0; i < 10; i++){
Thread.sleep(2000);
this.sendMessage("Hello, " + message, session);
}
}
@OnError
public void onError(Session session, Throwable error) {
log.error("发生错误");
error.printStackTrace();
}
/**
* 服务端发送消息给客户端
*/
private void sendMessage(String message, Session toSession) {
try {
log.info("服务端给客户端[{}]发送消息{}", toSession.getId(), message);
toSession.getBasicRemote().sendText(message);
} catch (Exception e) {
log.error("服务端发送消息给客户端失败:{}", e);
}
}
}
4.在static目录下创建前端请求页面index.html,
My WebSocket
最后启动应用访问:localhost:8091/index.html(端口为你自己定义的端口) 就能看到效果啦,每隔2秒浏览器会新增一条消息。
注意:如果请求的时候出现 Sec-WebSocket-Accept”标头值不正确,记得清一下缓存再试。
发表评论 (审核通过后显示评论):