偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

帶你了解一下WebSocket技術(shù)

開發(fā) 前端
在WebSocket規(guī)范提出之前,開發(fā)人員實(shí)現(xiàn)實(shí)時(shí)性較強(qiáng)的功能基本采用兩種輪詢方法:輪詢(polling)和Comet技術(shù)。

 在WebSocket規(guī)范提出之前,開發(fā)人員實(shí)現(xiàn)實(shí)時(shí)性較強(qiáng)的功能基本采用兩種輪詢方法:輪詢(polling)和Comet技術(shù)。

輪詢:輪詢技術(shù)要求客戶端以設(shè)定的時(shí)間間隔周期性地向服務(wù)端發(fā)送請求,頻繁地查詢是否有新的數(shù)據(jù)改動(dòng)。明顯地,這種方法會(huì)導(dǎo)致過多不必要的請求,浪費(fèi)流量和服務(wù)器資源。

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

缺點(diǎn):這兩種技術(shù)每一次請求、應(yīng)答,都浪費(fèi)了一定流量在相同的頭部信息上,并且開發(fā)復(fù)雜度也較大。

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

WebSocket與TCP、HTTP的關(guān)系

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


websocket通訊原理

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

  1. 打開握手
  2. 數(shù)據(jù)傳遞
  3. 關(guān)閉握手

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


websocket優(yōu)缺點(diǎn)

a)、服務(wù)器與客戶端之間交換的標(biāo)頭信息很小,大概只有2字節(jié);

b)、客戶端與服務(wù)器可互相主動(dòng)傳送數(shù)據(jù)給對方;

c)、Websocket是http協(xié)議的升級,支持持久連接并只需一次握手。不用頻率創(chuàng)建TCP請求及銷毀請求,減少網(wǎng)絡(luò)帶寬資源的占用,同時(shí)也節(jié)省服務(wù)器資源;

Spring boot websocket實(shí)現(xiàn)

引入依賴

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

 創(chuàng)建 WebSocket 處理器

擴(kuò)展 TextWebSocketHandler 或 BinaryWebSocketHandler ,你可以覆寫指定的方法。Spring 在收到 WebSocket 事件時(shí),會(huì)自動(dòng)調(diào)用事件對應(yīng)的方法。

  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.      * 建立連接后觸發(fā)的回調(diào) 
  14.      */ 
  15.     @Override 
  16.     public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception { 
  17.         System.out.println("spring 鏈接" + webSocketSession.getId()); 
  18.     } 
  19.  
  20.     /** 
  21.      * 收到消息時(shí)觸發(fā)的回調(diào) 
  22.      */ 
  23.     @Override 
  24.     public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception { 
  25.  
  26.     } 
  27.  
  28.     /** 
  29.      * 傳輸消息出錯(cuò)時(shí)觸發(fā)的回調(diào) 
  30.      */ 
  31.     @Override 
  32.     public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception { 
  33.  
  34.     } 
  35.  
  36.     /** 
  37.      * 斷開連接后觸發(fā)的回調(diào) 
  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默認(rèn)會(huì)給一個(gè)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在線調(diào)試工具

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

如下圖,

 

根據(jù)前面后端代碼,測試一下

 

后端日志


 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2020-02-10 14:26:10

GitHub代碼倉庫

2022-03-07 06:34:22

CQRS數(shù)據(jù)庫數(shù)據(jù)模型

2022-07-20 08:55:02

區(qū)塊鏈技術(shù)數(shù)據(jù)記錄

2021-11-09 08:57:13

元宇宙VR平行時(shí)空

2022-03-24 13:36:18

Java悲觀鎖樂觀鎖

2019-02-20 14:16:43

2024-04-11 12:19:01

Rust數(shù)據(jù)類型

2018-06-05 17:40:36

人工智能語音識別

2020-03-01 17:53:38

Excel大數(shù)據(jù)微軟

2025-01-10 11:07:28

2018-07-17 14:42:50

2023-11-18 09:09:08

GNUBSD協(xié)議

2024-02-28 18:22:13

AI處理器

2019-08-07 15:42:14

區(qū)塊鏈區(qū)塊鏈技術(shù)開發(fā)言語

2025-01-26 08:00:00

遠(yuǎn)程喚醒技術(shù)WOL網(wǎng)卡

2018-04-12 17:29:43

眾籌Linux紅旗軟件

2024-08-22 12:31:05

2023-06-30 07:22:48

新元素父節(jié)點(diǎn)編號

2018-04-25 06:46:52

2021-01-21 10:23:43

數(shù)據(jù)庫架構(gòu)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號