成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

什么是WebSocket技術(shù)

本篇內(nèi)容主要講解“什么是WebSocket技術(shù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“什么是WebSocket技術(shù)”吧!

網(wǎng)站的建設(shè)創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗豐富,不做模板,主營網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計體驗!已為成都玻璃鋼坐凳等企業(yè)提供專業(yè)服務(wù)。

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

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

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

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

伴隨著HTML5推出的WebSocket,使B/S模式具備了C/S模式的實時通信能力。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ù)據(jù)是通過http協(xié)議傳輸?shù)?,但是在建立連接之后,真正的數(shù)據(jù)傳輸階段是不需要http協(xié)議參與的。

什么是WebSocket技術(shù)

websocket通訊原理

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

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 打開握手

  3. 數(shù)據(jù)傳遞

  4. 關(guān)閉握手

什么是WebSocket技術(shù)

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

什么是WebSocket技術(shù)

websocket優(yōu)缺點

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

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

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

Spring boot websocket實現(xiàn)

引入依賴

<dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-websocket</artifactId> </dependency>

 創(chuàng)建 WebSocket 處理器

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

package com.ganhuojun.websocket.spring;  import org.springframework.stereotype.Component; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketSession;  @Component public class MySpringWebSocketHandler implements WebSocketHandler {      /**      * 建立連接后觸發(fā)的回調(diào)      */     @Override     public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception {         System.out.println("spring 鏈接" + webSocketSession.getId());     }      /**      * 收到消息時觸發(fā)的回調(diào)      */     @Override     public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception {      }      /**      * 傳輸消息出錯時觸發(fā)的回調(diào)      */     @Override     public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception {      }      /**      * 斷開連接后觸發(fā)的回調(diào)      */     @Override     public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception {      }      /**      * 是否處理分片消息      */     @Override     public boolean supportsPartialMessages() {         return false;     } }

配置 WebSocket

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

package com.ganhuojun.websocket.spring;  import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;  @Configuration @EnableWebSocket public class SpringWebSocketConfig implements WebSocketConfigurer {      @Override     public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {         //spring默認會給一個OriginHandshakeInterceptor的攔截器         // 因此需要setAllowedOrigins,否則websocket返回403         registry.addHandler(springWebSocketHandler(), "/spring/websocket").setAllowedOrigins("*");     }      @Bean     public MySpringWebSocketHandler springWebSocketHandler() {         return new MySpringWebSocketHandler();     }  }

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

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

如下圖,

 什么是WebSocket技術(shù)

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

 什么是WebSocket技術(shù)

后端日志

什么是WebSocket技術(shù)

到此,相信大家對“什么是WebSocket技術(shù)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享文章:什么是WebSocket技術(shù)
轉(zhuǎn)載源于:http://jinyejixie.com/article42/pocchc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、動態(tài)網(wǎng)站、網(wǎng)站排名、虛擬主機、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
时尚| 奎屯市| 三台县| 迁安市| 西和县| 赫章县| 西和县| 洱源县| 剑阁县| 包头市| 甘泉县| 七台河市| 松江区| 调兵山市| 德格县| 阜宁县| 宜宾县| 广丰县| 岳普湖县| 冷水江市| 洞头县| 广南县| 偏关县| 瑞安市| 嘉禾县| 留坝县| 任丘市| 明光市| 南昌县| 山东省| 罗源县| 鄂托克旗| 晋江市| 柳河县| 万安县| 奉化市| 尤溪县| 江山市| 南华县| 诸暨市| 贵南县|