WebSocket簡介

參考:Java NIO實現WebSocket服務器_nio websocket-CSDN博客

WebSocket API是HTML5中的一大特色,能夠使得建立連接的雙方在任意時刻相互推送消息,這意味著不同于HTTP,服務器服務器也可以主動向客戶端推送消息了。

WebSocket協議是在Http協議的基礎上升級而來的。

WebSocket協議建鏈過程:

Client端需要向服務器端發送一個Http請求,請求頭攜帶Connection: Upgrade以及Upgrade: websocket兩字段,用來告知服務器這是一個WebSocket握手請求。

我們可以使用JavaScript代碼,發起一個WebSocket鏈接請求,然后在瀏覽器F12查看請求信息如下:

服務端收到握手請求后,會返回有Connection和Upgrade字段來表明這是一個WebSocket數據包。響應狀態為101.

此時WebSocke鏈接已經建立,這是一個長連接,我們可以看下F12中websocket的狀態:

可以看到Time欄中顯示為Pending,等待用戶和服務器交互數據了。

此時我們可以在服務端再來看下接收到的請求日志:

(PS: 需要打開debug日志級別,同時需要顯示處理握手信息)

2024-05-23 15:45:39 DEBUG [NioWebSocketHandler] 收到消息:HttpObjectAggregator$AggregatedFullHttpRequest(decodeResult: success, version: HTTP/1.1, content: CompositeByteBuf(ridx: 0, widx: 0, cap: 0, components=0))
GET /websocket HTTP/1.1
Host: localhost:8081
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
Upgrade: websocket
Origin: null
Sec-WebSocket-Version: 13
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9
Sec-WebSocket-Key: +iXe1OUXfWR045vV7eEOvA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
content-length: 0

可以看到服務端收到的確實是一個FullHttpRequest請求。

下面看下WebSocket數據交換過程:

客戶端瀏覽器發送數據后,服務端會返回一個響應:

還是在F12的websocket的Messages頁中可以看到Client發送和接收的消息

具體的客戶端和服務端的代碼,可以參考【GitCode - 開發者的代碼家園icon-default.png?t=N7T8https://gitcode.com/Siwash/websocketWithNetty/blob/master/README.md】。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14037.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用TensorBoard記錄功能時,添加SummaryWriter到callbacks,某些版本可能不適用該如何修改

如果發現將SummaryWriter直接添加到callbacks不被支持,您可以采取另一種方式來集成TensorBoard記錄功能,即通過自定義回調函數來實現。Hugging Face Transformers庫允許用戶自定義訓練回調,這可以用來在訓練過程中向TensorBoard寫入日志。 下…

配置yum源

以下是在 Linux 系統中配置新的 yum 源的一般步驟和命令示例(以 CentOS 系統為例): 備份原有 yum 源配置文件:mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 創建新的 yum 源配置文件&#xff08…

【PB案例學習筆記】-08 控件拖動實現

寫在前面 這是PB案例學習筆記系列文章的第8篇,該系列文章適合具有一定PB基礎的讀者。 通過一個個由淺入深的編程實戰案例學習,提高編程技巧,以保證小伙伴們能應付公司的各種開發需求。 文章中設計到的源碼,小凡都上傳到了gitee…

反序列化漏洞的入門知識總結

1.概念定義 序列化與反序列化的目的是讓數據在傳輸和處理的時候更簡單,更快,反序列化出現在多種同面向對象語言所開發的網站和軟件上,比如java,php,python等等,如果有語言一個都沒學的,可以先去…

1941springboot VUE 服務機構評估管理系統開發mysql數據庫web結構java編程計算機網頁源碼maven項目

一、源碼特點 springboot VUE服務機構評估管理系統是一套完善的完整信息管理類型系統,結合springboot框架和VUE完成本系統,對理解JSP java編程開發語言有幫助系統采用springboot框架(MVC模式開發),系統具有完整的源代…

【NOIP2014普及組復賽】題2:比例簡化

題2:比例簡化 【題目描述】 在社交媒體上,經常會看到針對某一個觀點同意與否的民意調查以及結果。例如,對某一觀點表示支持的有 1498 1498 1498 人,反對的有 902 902 902 人,那么贊同與反對的比例可以簡單的記為 …

計算機-編程相關

在 Linux 中、一切都是文件、硬件設備是文件、管道是文件、網絡套接字也是文件。 for https://juejin.cn/post/6844904103437582344 fork 進程的一些問題 fork 函數比較特殊、一次調用會返回兩次。在父進程和子進程都會返回。 每個進程在內核中都是一個 taskstruct 結構、for…

ECMAScript、BOM與DOM:網頁開發的三大基石

在深入Web開發的世界時,有三個核心概念構成了理解網頁如何工作以及如何與之交互的基礎:ECMAScript、BOM(Browser Object Model),以及DOM(Document Object Model)。本文旨在簡要介紹這三個概念&a…

Thingsboard規則鏈:Entity Type Switch節點詳解

在物聯網(IoT)領域,隨著設備數量的爆炸式增長和數據復雜性的增加,高效、靈活的數據處理機制變得至關重要。作為一款先進的物聯網平臺,ThingsBoard提供了強大的規則鏈(Rule Chains)功能&#xff…

第四節 Starter 加載時機和源碼理解

tips:每個 springBoot 的版本不同,代碼的實現存會存在不同。 上一章,我們聊到 mybatis-spring-boot-starter; 簡單分析了它的結構。 這一章我們將著重分析 Starter 的加載機制,并結合源碼進行分析理解。 一、加載實際…

問題與解決:element ui垂直菜單展開后顯示不全

比如我這個垂直菜單展開后,其實系統管理下面還有其他子菜單,但是顯示不出來了。 解決方法很簡單,只需要在菜單外面包一層el-scrollbar,并且將高度設置為100vh。

Laravel 11 PHP8

一直都是用laravel 7 左右的,現在要求將項目升級到laravel 11 和使用PHP8,隨手記錄一些小問題,laravel 11的包是領導給的,沒有使用composer 安裝,所以我也不確定和官方的是否一致 遇到這問題 可以這樣 env 中默認的數…

基于若依的旅游推薦管理系統(spring boot+vue+mybatis+Ajax)

一、項目目的 隨著社會的高速發展,人們生活水平的不斷提高,以及工作節奏的加快,旅游逐漸成為一個熱門的話題,因為其形式的多樣,涉及的面比較廣,成為人們放松壓力,調節情緒的首要選擇。 傳統的旅…

上位機圖像處理和嵌入式模塊部署(mcu的按鍵輸入)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 做技術的同學,大部分都會把精力放在技術本身,卻忽視了學的東西有什么實際的用途。就拿gpio來說,一般我們點燈也…

正確認識IP地址和子網掩碼的聯系

IP地址和子網掩碼是計算機網絡中兩個非常重要的概念,它們共同確定了設備在局域網中的地址以及該地址所屬的子網,只要兩者結合,就能確定唯一地址IP66_ip歸屬地在線查詢_免費ip查詢_ip精準定位平臺。 IP地址是用于標識計算機網絡中的每臺設備的…

Ajax用法總結(包括原生Ajax、Jquery、Axois)

HTTP知識 HTTP(hypertext transport protocol)協議『超文本傳輸協議』,協議詳細規定了瀏覽器和萬維網服務器之間互相通信的規則。 請求報文 請求行: GET、POST /s?ieutf-8...(url的一長串參數) HTTP/1.1 請求頭…

Buzz庫網絡爬蟲實例:快速爬取百度搜索實時熱點

前言 隨著互聯網的發展,信息獲取已經成為了人們日常生活和工作中的重要一環。而在信息獲取的過程中,網絡爬蟲作為一種自動化的數據采集工具,為我們提供了極大的便利。本文將介紹如何利用PHP編寫一個簡單而高效的網絡爬蟲,實現快速…

R實驗 參數檢驗(二)

實驗目的:掌握正態分布和二項分布中,功效與樣本容量之間的關系;學會利用R軟件完成一個正態總體方差和兩個正態總體方差比的區間估計和檢驗。 實驗內容: (習題5.28)一種藥物可治療眼內高壓,目的…

Mac安裝 Intellij IDEA,親測有效M1、M2可用

引言 最近開始學習使用spring boot寫一個簡單的后端項目,使用Intellij IDEA軟件,Intellij IDEA為新用戶提供了30天的免費試用。 方案 1.官網下載Intellij IDEA IntelliJ IDEA – the Leading Java and Kotlin IDE 或者直接網盤連接下載:…

第一份工資

當我拿到我人生的第一份工資時,那是一種難以言表的激動。我記得那個下午,陽光透過窗戶灑在了我的辦公桌上,我看著那張支票,心中滿是欣喜和自豪。那是我獨立生活的開始,也是我對自己能力的一種肯定。 我記得我是如何支配…