目录
springboot + WebSocket实时显示消息
最近有个web项目要实现在前端实时显示采集到的最新的一张图片,查阅资料后发现WebSocket在实时显示方面比较容易,主要是建立了一个全双工的通信,使前端和后端能够随时通信。比之前所用的轮询要更好一些。
本博客是在我做项目之前使用WebSocket做的一个小测试,证明是可以实现实时显示的。根据网上博客实现了一个实时在线人数的显示,网上给的都不太详细,并且只是将其显示到console中,没有显示到前端。
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
开启WebSocket支持
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
建立WebSocketServer
@ServerEndpoint("/websocket/{sid}")
@Component
public class WebSocketServer {
static Logger log = LoggerFactory.getLogger(WebSocketServer.class);
//静态变量,用来记录当前在线连接数。
private static int onlineCount = 0;
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();
//与某个客户端的连接会话,需要通过它来给客户端发送数据
private Session session;
//接收sid
private String sid="";
/**
* 连接建立成功调用的方法*/
@OnOpen
public void onOpen(Session session,@PathParam("sid") String sid) {
this.session = session;
webSocketSet.add(this); //加入set中
addOnlineCount(); //在线数加1
log.info("有新窗口开始监听:"+sid+",当前在线人数为" + getOnlineCount());
this.sid=sid;
try {