成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

帶你了解一下WebSocket技術

開發 前端
在WebSocket規范提出之前,開發人員實現實時性較強的功能基本采用兩種輪詢方法:輪詢(polling)和Comet技術。

 在WebSocket規范提出之前,開發人員實現實時性較強的功能基本采用兩種輪詢方法:輪詢(polling)和Comet技術。

輪詢:輪詢技術要求客戶端以設定的時間間隔周期性地向服務端發送請求,頻繁地查詢是否有新的數據改動。明顯地,這種方法會導致過多不必要的請求,浪費流量和服務器資源。

Comet技術可分為:長輪詢、流技術。長輪詢改進了上述的輪詢技術,減小了無用的請求。它會為某些數據設定過期時間,當數據過期后才會向服務端發送請求;這種機制適合數據的改動不是特別頻繁的情況。流技術**指客戶端使用一個隱藏的窗口與服務端建立HTTP長連接,服務端會不斷更新連接狀態以保持HTTP長連接存活,然后才能主動推送數據給客戶端。

缺點:這兩種技術每一次請求、應答,都浪費了一定流量在相同的頭部信息上,并且開發復雜度也較大。

伴隨著HTML5推出的WebSocket,使B/S模式具備了C/S模式的實時通信能力。WebSocket連接本質上是TCP連接,不需要每次傳輸都帶上重復的頭部數據。WebSocket的工作流程:瀏覽器通過JavaScript向服務端發出建立WebSocket連接的請求,在WebSocket連接建立成功后,客戶端和服務端就可以通過TCP連接傳輸數據。

WebSocket與TCP、HTTP的關系

WebSocket與http協議一樣都是基于TCP的可靠協議,WebSocket在建立握手連接時,數據是通過http協議傳輸的,但是在建立連接之后,真正的數據傳輸階段是不需要http協議參與的。


websocket通訊原理

從下圖可以明顯的看到,分三個階段:

  1. 打開握手
  2. 數據傳遞
  3. 關閉握手

下圖顯示了WebSocket主要的三步 瀏覽器和 服務器端分別做了那些事情。


websocket優缺點

a)、服務器與客戶端之間交換的標頭信息很小,大概只有2字節;

b)、客戶端與服務器可互相主動傳送數據給對方;

c)、Websocket是http協議的升級,支持持久連接并只需一次握手。不用頻率創建TCP請求及銷毀請求,減少網絡帶寬資源的占用,同時也節省服務器資源;

Spring boot websocket實現

引入依賴

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-websocket</artifactId> 
  4. </dependency> 

 創建 WebSocket 處理器

擴展 TextWebSocketHandler 或 BinaryWebSocketHandler ,你可以覆寫指定的方法。Spring 在收到 WebSocket 事件時,會自動調用事件對應的方法。

  1. package com.ganhuojun.websocket.spring; 
  2.  
  3. import org.springframework.stereotype.Component; 
  4. import org.springframework.web.socket.CloseStatus; 
  5. import org.springframework.web.socket.WebSocketHandler; 
  6. import org.springframework.web.socket.WebSocketMessage; 
  7. import org.springframework.web.socket.WebSocketSession; 
  8.  
  9. @Component 
  10. public class MySpringWebSocketHandler implements WebSocketHandler { 
  11.  
  12.     /** 
  13.      * 建立連接后觸發的回調 
  14.      */ 
  15.     @Override 
  16.     public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception { 
  17.         System.out.println("spring 鏈接" + webSocketSession.getId()); 
  18.     } 
  19.  
  20.     /** 
  21.      * 收到消息時觸發的回調 
  22.      */ 
  23.     @Override 
  24.     public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception { 
  25.  
  26.     } 
  27.  
  28.     /** 
  29.      * 傳輸消息出錯時觸發的回調 
  30.      */ 
  31.     @Override 
  32.     public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception { 
  33.  
  34.     } 
  35.  
  36.     /** 
  37.      * 斷開連接后觸發的回調 
  38.      */ 
  39.     @Override 
  40.     public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception { 
  41.  
  42.     } 
  43.  
  44.     /** 
  45.      * 是否處理分片消息 
  46.      */ 
  47.     @Override 
  48.     public boolean supportsPartialMessages() { 
  49.         return false
  50.     } 

 配置 WebSocket

將 WebSocket 處理器添加到注冊中心

  1. package com.ganhuojun.websocket.spring; 
  2.  
  3. import org.springframework.context.annotation.Bean; 
  4. import org.springframework.context.annotation.Configuration; 
  5. import org.springframework.web.socket.config.annotation.EnableWebSocket; 
  6. import org.springframework.web.socket.config.annotation.WebSocketConfigurer; 
  7. import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; 
  8.  
  9. @Configuration 
  10. @EnableWebSocket 
  11. public class SpringWebSocketConfig implements WebSocketConfigurer { 
  12.  
  13.     @Override 
  14.     public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 
  15.         //spring默認會給一個OriginHandshakeInterceptor的攔截器 
  16.         // 因此需要setAllowedOrigins,否則websocket返回403 
  17.         registry.addHandler(springWebSocketHandler(), "/spring/websocket").setAllowedOrigins("*"); 
  18.     } 
  19.  
  20.     @Bean 
  21.     public MySpringWebSocketHandler springWebSocketHandler() { 
  22.         return new MySpringWebSocketHandler(); 
  23.     } 
  24.  

 前端可以自己編寫js代碼,本文直接使用websocket在線調試工具

http://www.websocket-test.com/

如下圖,

 

根據前面后端代碼,測試一下

 

后端日志


 

責任編輯:姜華 來源: 今日頭條
相關推薦

2020-02-10 14:26:10

GitHub代碼倉庫

2022-03-07 06:34:22

CQRS數據庫數據模型

2022-07-20 08:55:02

區塊鏈技術數據記錄

2021-11-09 08:57:13

元宇宙VR平行時空

2022-03-24 13:36:18

Java悲觀鎖樂觀鎖

2019-02-20 14:16:43

2018-06-05 17:40:36

人工智能語音識別

2024-04-11 12:19:01

Rust數據類型

2020-03-01 17:53:38

Excel大數據微軟

2025-01-10 11:07:28

2018-07-17 14:42:50

2023-11-18 09:09:08

GNUBSD協議

2024-02-28 18:22:13

AI處理器

2019-08-07 15:42:14

區塊鏈區塊鏈技術開發言語

2025-01-26 08:00:00

遠程喚醒技術WOL網卡

2018-04-12 17:29:43

眾籌Linux紅旗軟件

2021-01-21 10:23:43

數據庫架構技術

2024-08-22 12:31:05

2023-06-30 07:22:48

新元素父節點編號

2018-04-25 06:46:52

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜久草| 黄网站涩免费蜜桃网站 | 亚洲在线视频 | 国产高清一区二区 | 99精品国产一区二区青青牛奶 | 久久久久久91 | 亚洲视频中文字幕 | 亚洲视频在线观看免费 | 亚州午夜精品 | 国产福利91精品一区二区三区 | 国产成人一区二区三区电影 | 国产精品一区二区av | 理伦毛片| 亚洲人成一区二区三区性色 | 亚洲天堂一区二区 | 观看av| 久久久久久亚洲 | 国产精品国产精品 | 黄色一级大片在线免费看产 | 久久久久久久久99精品 | 美女毛片免费看 | 国产高清视频 | 91精品国产高清一区二区三区 | 一区二区三区小视频 | 国产精品麻 | 羞羞视频免费观看 | 日韩免费福利视频 | 三a毛片 | 国产精品亚洲一区二区三区在线 | 亚洲国产精品一区二区三区 | 中文字幕丁香5月 | 99re在线视频| 亚洲国产成人精品女人 | 精品国产色 | 丁香婷婷成人 | 免费在线h视频 | 日本在线黄色 | 亚洲性网| 欧美群妇大交群中文字幕 | 一区二区三区亚洲 | 国产精品婷婷 |