成人免费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

2024-04-11 12:19:01

Rust數據類型

2018-06-05 17:40:36

人工智能語音識別

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紅旗軟件

2024-08-22 12:31:05

2023-06-30 07:22:48

新元素父節點編號

2018-04-25 06:46:52

2021-01-21 10:23:43

數據庫架構技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费中文字幕日韩欧美 | 一级免费视频 | 91久久久久久久久 | 国产免费又黄又爽又刺激蜜月al | 国产一区二区三区网站 | 啪一啪 | 日韩精品成人 | 亚洲天堂一区 | 国产在线精品一区二区三区 | av不卡一区| 日本成人片在线观看 | 中文字幕久久精品 | 亚洲国产精品91 | 亚洲最大的黄色网址 | 亚洲成av人片在线观看 | 99热99| 日韩精品免费在线观看 | 国产精品不卡 | 999久久久久久久久 国产欧美在线观看 | 久草a√| 中文精品视频 | 日日操av| 欧美另类视频在线 | 97国产精品 | 精品欧美一区二区在线观看视频 | 91精品国产欧美一区二区 | 在线观看中文字幕亚洲 | 波多野结衣电影一区 | 欧美片网站免费 | 久久人人网| 国产精品亚洲成在人线 | 精品在线看 | 日本免费在线观看视频 | 992tv人人草| 操人网站| 国产激情一区二区三区 | 国产免费一区二区三区免费视频 | 欧美精品片 | 精品国产乱码久久久久久丨区2区 | 三级成人在线 | 一区二区三区国产好 |