最近项目上有需要,先写了一个demo用于记录和研究websocket,代码有些是借鉴了其他前辈的代码,有些是自己的,还包括一些踩坑
主要用于需要后端想前端进行数据库变化时推送刷新页面通知。
WebSocketServlet
这个主要用于配置方法以及在方法内轮询线程查询数据库
import com.service.IdentifyRecordService;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
//在相对路径中发布端点websocket
@ServerEndpoint("/websocket")
@Component
public class WebSocketServlet {
MyThread thread1=new MyThread();
Thread thread=new Thread(thread1);
@Resource
private IdentifyRecordService identifyRecordService;
//用来存放每个客户端对应的MyWebSocket对象。
private static CopyOnWriteArraySet<WebSocketServlet> webSocketSet = new CopyOnWriteArraySet<WebSocketServlet>();
private javax.websocket.Session session=null;
/**
* @ClassName: onOpen
* @Description: 开启连接的操作
*/
@OnOpen
public void onOpen(Session session) throws IOException{
this.session=session;
webSocketSet.add(this);
System.out.println(webSocketSet);
//开启一个线程对数据库中的数据进行轮询
thread.start();
}
/**
* @ClassName: onClose
* @Description: 连接关闭的操作
*/
@OnClose
public void onClose(){
thread1.stopMe();
webSocketSet.remove(this);