Tomcat實現WebSocket即時通訊 Java實現WebSocket的兩種方式

HTTP協議是“請求-響應”模式,瀏覽器必須先發請求給服務器,服務器才會響應該請求。即服務器不會主動發送數據給瀏覽器。

實時性要求高的應用,如在線游戲、股票實時報價和在線協同編輯等,瀏覽器需實時顯示服務器的最新數據,因此出現Ajax和Comet技術:

  • Ajax本質還是輪詢
  • Comet基于HTTP長連接做了一些hack

但它們實時性不高,頻繁請求也會給服務器巨大壓力,也浪費網絡流量和帶寬。于是HTML5推出WebSocket標準,使得瀏覽器和服務器之間任一方都可主動發消息給對方,這樣服務器有新數據時可主動推給瀏覽器。

WebSocket原理

網絡上的兩個程序通過一個雙向鏈路進行通信,這個雙向鏈路的一端稱為一個Socket。一個Socket對應一個IP地址和端口號,應用程序通常通過Socket向網絡發出或應答網絡請求。

Socket不是協議,是對TCP/IP協議層抽象出來的API。

WebSocket跟HTTP協議一樣,也是應用層協議。為兼容HTTP協議,它通過HTTP協議進行一次握手,握手后數據就直接從TCP層的Socket傳輸,與HTTP協議再無關。

這里的握手指應用協議層,不是TCP層,握手時,TCP連接已建立。 即HTTP請求里帶有websocket的請求頭,服務端回復也帶有websocket的響應頭。

瀏覽器發給服務端的請求會帶上跟WebSocket有關的請求頭,比如Connection: Upgrade和Upgrade: websocket

img

若服務器支持WebSocket,同樣會在HTTP響應加上WebSocket相關的HTTP頭部:

img

這樣WebSocket連接就建立好了。

WebSocket的數據傳輸以frame形式傳輸,將一條消息分為幾個frame,按先后順序傳輸出去。為何這樣設計?

  • 大數據的傳輸可以分片傳輸,無需考慮數據大小問題
  • 和HTTP的chunk一樣,可邊生成數據邊傳輸,提高傳輸效率

Tomcat如何支持WebSocket


鏈接:https://juejin.cn/post/7095918534210879519

Java實現WebSocket的兩種方式?

參考?https://www.cnblogs.com/onlymate/p/9521327.html

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

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

相關文章

UML建模圖文詳解教程06——順序圖

版權聲明 本文原創作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl本文參考資料:《UML面向對象分析、建模與設計(第2版)》呂云翔,趙天宇 著 順序圖概述 順序圖(sequence diagram,也…

(三)C語言之for語句概述

&#xff08;三&#xff09;C語言之for語句概述 一、使用for語句實現打印華氏溫度與攝氏溫度轉換二、for語句概述三、練習 一、使用for語句實現打印華氏溫度與攝氏溫度轉換 #include <stdio.h> /*當華氏溫度為 0,20,40,...300時&#xff0c;打印出華氏溫度與攝氏溫度對照…

一個簡單的QT應用示例

一個簡單的QT應用示例&#xff1a;創建一個窗口程序。 首先&#xff0c;確保已經安裝了Qt開發環境。接下來&#xff0c;按照以下步驟創建一個簡單的窗口程序&#xff1a; 1. 打開Qt Creator&#xff0c;點擊“新建文件或項目”。 2. 選擇“應用程序”&#xff0c;然后點擊“下…

【MATLAB】根軌跡的繪制及rltool工具的使用

目錄 一、MATLAB中傳遞函數的表示二、rlocus函數繪制根軌跡1.常規根軌跡仿真示例2.參數根軌跡仿真示例3.零度根軌跡仿真示例 三、圖形化工具rltool介紹 一、MATLAB中傳遞函數的表示 在繪制系統的根軌跡之前&#xff0c;需要知道傳遞函數在matlab中如何表示。 在matlab中&#…

VOC數據集和COCO數據集直接的相互轉換

VOC數據集格式 get_list.py import os import random import shutil# 設置隨機種子 random.seed(1000)# 判斷Annotations和JpegImages是否對應 train_precent=0.8 label_path= "../../Annotations" print(os.path.abspath(label_path)) save="../Main" pr…

repo init報error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

repo init報error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed 1 repo init出錯的信息2 解決方法 在ubuntu執行repo init的時候報了repo init報error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed這種錯誤&#xff0c;解決方法是需要更新本地…

PS給圖片增加一個白色邊框。

問題描述&#xff1a;PS如何給圖片增加一個白色邊框&#xff1f; 解決辦法&#xff1a; 第一步&#xff1a;使用shiftAltA快捷鍵&#xff0c;在圖片四周拉出一個灰白色的邊框。如下圖所示&#xff1a; 第二步&#xff0c;使用快捷鍵Ctrlshiftn新建一個圖層。 并把新建的圖層…

創建maven的web項目

&#xff08;一&#xff09;創建maven的web項目 Step1、創建一個普通的maven項目 &#xff08;1&#xff09;新建一個empty project&#xff0c;命名為SSM2。 點擊項目名&#xff0c;右鍵new&#xff0c;選擇Module&#xff0c;左側選擇“Maven archetype”&#xff0c;可以給…

我叫:快速排序【JAVA】

1.自我介紹 1.快速排序是由東尼霍爾所發展的一種排序算法。 2.快速排序又是一種分而治之思想在排序算法上的典型應用。 3.本質上來看&#xff0c;快速排序應該算是在冒泡排序基礎上的遞歸分治法。 2.思想共享 快速排序(Quicksort)是對冒泡排序的一種改進。基本思想是:通過一趟…

【iOS】數據持久化(二)之歸檔和解檔(iOS 13以后)

在之前介紹的數據存儲方法中&#xff0c;不管是NSUserDefaults還是plist文件都不能對自定義對象進行存儲&#xff0c;OC提供的解歸檔恰好解決了這個問題 本片文章對 iOS13 以后的版本 歸檔和解檔 進行介紹。老版本的解歸檔見這篇文章&#xff1a;【iOS】文件&#xff08;對象數…

Python Anaconda創建虛擬環境及Pycharm使用虛擬環境

目錄 前言 一、Anaconda與Pycharm 二、conda常用命令 三、Pycharm使用虛擬環境 總結 前言 我們在做開發任務時可能會創建多個項目&#xff0c;這些項目可能會依賴于不同的Python環境。比如有的用到Python3.6、有的用到Python3.7&#xff1b;有的用Pytorch開發、有的用Tens…

解決:ImportError: cannot import name ‘Sequence‘ from ‘collections‘

解決&#xff1a;ImportError: cannot import name ‘Sequence‘ from ‘collections‘ 背景 在使用之前的代碼時&#xff0c;報錯&#xff1a; File “G:\research\code\MicroDE_py\plot_bcic_iv_4_ecog_trial.py”, line 262, in from skorch.helper import predefined_spl…

Java 數據結構篇-實現單鏈表核心API

&#x1f525;博客主頁&#xff1a; 小扳_-CSDN博客 ?感謝大家點贊&#x1f44d;收藏?評論? 文章目錄 1.0 單鏈表的說明 2.0 單鏈表的創建 2.1 單鏈表 - 頭插節點 2.2 單鏈表 - 遍歷 2.2.1 使用簡單的 for/while 循環 2.2.2 實現 forEach 方法 2.2.3 實現迭代器的方法 2.…

UE5 中的computer shader使用

轉載&#xff1a;UE5 中的computer shader使用 - 知乎 (zhihu.com) 目標 通過藍圖輸入參數&#xff0c;經過Compture Shader做矩陣運算 流程 1. 新建插件 2. 插件設置 3. 聲明和GPU內存對齊的參數結構 4. 聲明Compture Shader結構 5. 參數綁定 6. 著色器實現 7. 分配 work gr…

VueRouter

路由介紹 1.思考 單頁面應用程序&#xff0c;之所以開發效率高&#xff0c;性能好&#xff0c;用戶體驗好 最大的原因就是&#xff1a;頁面按需更新 比如當點擊【發現音樂】和【關注】時&#xff0c;只是更新下面部分內容&#xff0c;對于頭部是不更新的 要按需更新&#…

Git 基本使用命令

Git 基本使用命令 下面是一些常用的 Git 基本使用命令&#xff1a; 初始化一個新的 Git 倉庫&#xff1a; git init克隆&#xff08;Clone&#xff09;一個遠程倉庫到本地&#xff1a; git clone <repository_url>添加文件或目錄到暫存區&#xff08;Staging Area&am…

微信小程序前端環境搭建

搭建微信小程序前端環境 申請小程序測試賬號 訪問路徑 使用微信掃描二維碼進行申請&#xff0c;申請成功之后&#xff0c;進入界面&#xff0c;獲取小程序ID(AppID)和秘鑰(AppSecret) 安裝微信web開發者工具 訪問路徑 選擇穩定開發的版本 需要在小程序的設置中將默認關閉…

geoserver發布tif矢量數據圖層

cesium加載上傳至geoserver的tif矢量數據_cesium加載tiff-CSDN博客 geoserver安裝及跨域問題解決方案&#xff1a;geoserver安裝及跨域問題解決方案_geoserver 跨域_1 1王的博客-CSDN博客 將TIF上傳至geoserver 啟動geoserver服務&#xff0c;并進入geoserver主頁。 1. 新建…

【物聯網產品架構】如何構建物聯網產品路線圖

面對現實吧。建立物聯網產品路線圖難度要比為“正常”技術產品制定路線圖要困難得多。 這是因為IoT產品是復雜的系統。為了創建一個工作的解決方案&#xff0c;物聯網技術棧的所有層 - 設備硬件&#xff0c;設備軟件&#xff0c;通信&#xff0c;云平臺和云應用都需要一起工作。…

Spring Cloud五大組件

Spring Cloud五大組件 Spring Cloud是分布式微服務架構的一站式解決方案&#xff0c;在Spring Boot基礎上能夠輕松搭建微服務系統的架構。 現有Spring Cloud有兩代實現&#xff1a; 一代&#xff1a;Spring Cloud Netflix&#xff0c;主要由&#xff1a;Eureka、Ribbon、Feig…