相关推荐recommended
【spring(六)】WebSocket网络传输协议
作者:mmseoamin日期:2023-12-11

🌈键盘敲烂,年薪30万🌈

目录

核心概要:

概念介绍:

对比HTTP协议:⭐

WebSocket入门案例:⭐


核心概要:

websocket对比http

【spring(六)】WebSocket网络传输协议,第1张

概念介绍:

        WebSocket是Web服务器的一个组件,WebSocket是一种基于TCP的新的网络传输协议,它实现了浏览器与服务器全双工通信——浏览器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。

深度理解:

        前端发送请求建立连接,服务器接收到连接请求,与前端建立连接(基于WebSocket),前端发送请求到服务器,服务器给出响应,连接不会关闭,如果前端再次发送请求,服务器正常处理,直到这次连接关闭。

应用场景:

        例如 视频弹幕,网页聊天,浏览器的实时动态。

对比HTTP协议:⭐

【spring(六)】WebSocket网络传输协议,第1张

WebSocket入门案例:⭐

        实现步骤:

  • 资源准备:有html页面作为客户端
  • 服务器端导入WebSocket的maven坐标
  • 导入WebSocket的服务器组件
  • 导入配置类,注册WebSocket的服务端组件
  • 注册一个定时任务类,用于测试。

            分析:

    WebSocketServer是接收响应前端请求的,相当于SpringMVC中的Controller。

    前端代码

    
    
    
        
        WebSocket Demo
    
    
        
        
        
        
        
    
    
    

    导入maven坐标

            
                org.springframework.boot
                spring-boot-starter-web
                compile
            

    导入WebSocketServer代码:

    @Component
    @ServerEndpoint("/ws/{sid}")
    public class WebSocketServer {
        //存放会话对象
        private static Map sessionMap = new HashMap();
        /**
         * 连接建立成功调用的方法
         */
        @OnOpen
        public void onOpen(Session session, @PathParam("sid") String sid) {
            System.out.println("客户端:" + sid + "建立连接");
            sessionMap.put(sid, session);
        }
        /**
         * 收到客户端消息后调用的方法
         *
         * @param message 客户端发送过来的消息
         */
        @OnMessage
        public void onMessage(String message, @PathParam("sid") String sid) {
            System.out.println("收到来自客户端:" + sid + "的信息:" + message);
        }
        /**
         * 连接关闭调用的方法
         *
         * @param sid
         */
        @OnClose
        public void onClose(@PathParam("sid") String sid) {
            System.out.println("连接断开:" + sid);
            sessionMap.remove(sid);
        }
        /**
         * 群发
         *
         * @param message
         */
        public void sendToAllClient(String message) {
            Collection sessions = sessionMap.values();
            for (Session session : sessions) {
                try {
                    //服务器向客户端发送消息
                    session.getBasicRemote().sendText(message);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    导入WebSocketConfiguration代码:

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

    导入TASK代码:

    @Component
    public class WebSocketTask {
        @Autowired
        private WebSocketServer webSocketServer;
        /**
         * 通过WebSocket每隔5秒向客户端发送消息
         */
        @Scheduled(cron = "0/5 * * * * ?")
        public void sendMessageToClient() {
            webSocketServer.sendToAllClient("这是来自服务端的消息:" + DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now()));
        }
    }

    测试:

    【spring(六)】WebSocket网络传输协议,第3张