springboot中使用websocket

最近项目中一个需求,需要从服务器端推送消息到浏览器端,浏览器端接收到消息推送执行弹窗提示。
这里选用了websocket,记录下使用步骤,项目使用的springboot。

  • 引入依赖
        
            org.springframework.boot
            spring-boot-starter-websocket
            2.1.4.RELEASE
        
  • 开启websocket
@Configuration
public class WebSocketConfig {

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

}
  • 创建webSocketSever
@ServerEndpoint("/yourServerPath")
@Component("YourServerName")
@Slf4j
public class MotorAlarmWebSocketServer {

    // concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象
    private static final CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet<>();


    public static Set getWebSocketSet(){
        return webSocketSet;
    }

    // 与某个客户端的连接会话,需要通过它来与客户端进行数据收发
    private Session session;
    
    @OnOpen
    public void onOpen(Session session) throws IOException {
        this.session = session;
        webSocketSet.add(this);
        log.info("系统连接成功");

    }

    @OnClose
    public void onClose() {
        webSocketSet.remove(this);
    }

    /**
     * 收到客户端消息后调用的方法
     */
    @OnMessage
    public void onMessage(String message) {
        //群发消息
        for (MotorAlarmWebSocketServer item : webSocketSet) {
            try {
                item.sendMessage(message);
            } catch (IOException e) {
                log.info("消息发送失败");
            }
        }}

    @OnError
    public void onError(Session session, Throwable error) {
        log.info("断开连接");
    }

    /**
     * 实现服务器主动推送
     */
    public void sendMessage(String message) throws IOException {
        for (MotorAlarmWebSocketServer item : webSocketSet) {
            if (item.session.isOpen()) {
                item.session.getBasicRemote().sendText(message);
            }
        }
    }

这样当后台启动项目时,webSocket也就同时启动,同时会监听接入的链接,业务逻辑中可以调用该方法的sendMessage方法会向接入的链接发送。

你可能感兴趣的:(springboot中使用websocket)