• springboot 集成webSocket


    1、什么是webSocket?

    WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

    1.新建config包,创建WebSocketConfig类

    @Configuration
    public class WSConfiguration {
        @Bean
        public ServerEndpointExporter serverEndpointExporter(){
            return new ServerEndpointExporter();
        }
    }
    ​

    2.新建service包,创建WebSocketServer类

    @Component
    @ServerEndpoint("/websocket")
    public class WebSocketServer {
        //准备一个内部安全的集合 存放所有用户的websocket服务
        private static CopyOnWriteArraySet wsset =  new CopyOnWriteArraySet<>();
        private Session session;
        @OnOpen
        public void opOpen(Session session){
            this.session=session;
            //将自身填充到set集合中 这个集合是所有客户端websocket的集合
    ​
            wsset.add(this);
            sendMsg();
    ​
    ​
        }
        @OnClose
        public void onClose(){
            //将自己从set集合中删除
             wsset.remove(this);
        }
        @OnError
        public void onError(Session session,Throwable error){
            System.out.println(this+"发生错误了");
        }
    ​
        //客户端发来消息
        @OnMessage
        public void onMessage(String clientMsg, Session session){
            System.out.println("来自客户端的信息+“。。。。。。。。。”===》"+clientMsg);
            //每隔一秒给你推送一条当前时间信息
    ​
        }
    ​
        private void sendMsg(){
    ​
            try {
                while(true){
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String time =sdf.format(new Date());
                    //发送数据
                    this.session.getBasicRemote().sendText(time);
                    Thread.sleep(1000);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    ​
    ​
    }
    ​

    3.controller层加注解

    @SpringBootApplication
    @EnableWebSocket
    public class MywebsocketApplication {
    ​
        public static void main(String[] args) {
            SpringApplication.run(MywebsocketApplication.class, args);
        }
    ​
    }
    ​

    4在resources下编写HTMl

    
        
        
        
            
    ​       ​   ​

    5网页访问

    http://localhost:8080/

    6 WebSocketServer同步发送消息

    package com.kgc.mywebsocket.commons;
    ​
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Service;
    ​
    import javax.websocket.*;
    import javax.websocket.server.ServerEndpoint;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.concurrent.CopyOnWriteArrayList;
    import java.util.concurrent.CopyOnWriteArraySet;
    @Component
    @ServerEndpoint("/websocket")
    public class WebSocketServer {
        //准备一个内部安全的集合 存放所有用户的websocket服务
        private static CopyOnWriteArraySet wsset =  new CopyOnWriteArraySet<>();
        private Session session;
        @OnOpen
        public void opOpen(Session session){
            this.session=session;
            //将自身填充到set集合中 这个集合是所有客户端websocket的集合
    ​
            wsset.add(this);
    //        sendMsg();
    ​
    ​
        }
        @OnClose
        public void onClose(){
            //将自己从set集合中删除
             wsset.remove(this);
        }
        @OnError
        public void onError(Session session,Throwable error){
            System.out.println(this+"发生错误了");
        }
    ​
        //客户端发来消息
        @OnMessage
        public void onMessage(String clientMsg, Session session){
            System.out.println("来自客户端的信息+“。。。。。。。。。”===》"+clientMsg);
            //每隔一秒给你推送一条当前时间信息
            sendAllClient(clientMsg);
    ​
        }
    ​
        private void sendMsg(){
    ​
            try {
                while(true){
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String time =sdf.format(new Date());
                    //发送数据
                    this.session.getBasicRemote().sendText(time);
                    Thread.sleep(1000);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    ​
        private void sendAllClient(String msg){
            try {
                for(WebSocketServer wss:wsset){
                    wss.session.getBasicRemote().sendText(msg);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    ​

    7 html同步发送消息

    
    
        
        
        
            
          ==========             ==========      
               
          ​   ​
    http://localhost:8080/
    

  • 相关阅读:
    C++中数组和指针的类似之处
    SpringCloud Alibaba - Seata 部署 TC 服务,并集成微服务
    使用nacos配置中心管理配置文件时,springcloud程序启动报错,无法找到对应的配置文件(加载到了错误的配置文件)
    传奇登陆游戏黑屏错位以及登陆器配置和常见问题
    STL排序、拷贝和替换算法
    webpack插件plugin 添加版权 打包html js压缩
    学信息系统项目管理师第4版系列13_立项管理
    webgl(threejs)生成房间楼层
    SpringBoot+Vue项目旅游信息推荐系统【源码开源】
    揭秘2023年最热门的跨境电商源码趋势,你不能错过的关键信息
  • 原文地址:https://blog.csdn.net/just_learing/article/details/125899260