[網頁五子棋]項目介紹以及websocket的消息推送(輪詢操作)、報文格式和握手過程(建立連接過程)

文章目錄

  • 項目背景
  • 核心技術
  • 創建項目
  • WebSocket
    • 消息推送
      • 輪詢操作
    • 報文格式
    • 握手過程(建立連接過程)

項目背景

  • 用戶模塊
    1. 用戶的注冊和登錄
    2. 管理用戶的天梯分數,比賽場數,獲勝場數等信息
  • 匹配模塊
    • 依據用戶的天梯積分,來實現匹配機制
  • 對戰模塊
    • 把兩個匹配到的玩家,放到一個游戲房間中,雙方通過網頁的形式來進行對戰比賽

核心技術

  • Java
  • Spring/Spring Boot/Spring MVC
  • HTML/CSS/JS/AJAX
  • MySQL/MyBatis
  • WebSocket

創建項目

相關依賴image.png|309

WebSocket

消息推送

我們之前學習的服務器開發,主要是這樣的模型:

  • 客戶端主動向服務器發起請求,服務器收到之后,返回一個響應
  • 如果客戶端不主動發起請求,服務器是不能主動聯系客戶端的

我們是否需要,服務器主動給客戶端發送消息這樣的場景呢?

  • 需要。——消息推送

image.png

  • 當玩家 1 在棋盤上落子的時候,玩家 1 的客戶端就需要給服務器發一個消息,告訴服務器這個玩家把棋子落在哪個位置了
  • 玩家 2 也就需要及時地獲取到玩家 1 的落子信息
  • qq、微信、五子棋…

輪詢操作

當前已有的知識,主要是 HTTP。但 HTTP 自身是難以實現這種消息推送效果的

  • HTTP 要想實現類似的效果,就需要基于“輪詢”的機制

image.png

  • 玩家 1 在思考中,尚未落子
  • 玩家 2,每隔一段時間(每隔 1s500ms…),就主動地給服務器發起一個請求,問看看當前玩家 1 落子了沒有

很明顯,像這樣的輪詢操作,開銷是比較大的,成本也是比較高的

  • 如果輪詢間隔時間長,玩家 1 落子之后,玩家 2 就不能及時拿到結果
  • 如果輪詢間隔時間短,雖然即時性得到改善,但是玩家 2 不得不浪費更多的機器資源(尤其是帶寬)

這就類似于去餐館吃飯

  1. 每隔 1 分鐘,就去前臺看一眼,問問老板,我的飯好了沒——輪詢
  2. 我直接找個角落坐下來,玩手機,啥時候飯做好了,老板就端過來了——消息推送

因此,websocket 就是實現消息推送的一個主要的方式

報文格式

Websocket 也是一個應用層協議,下層是基于 TCPimage.png- FIN:代表當前是不是一個結束報文

  • RSV:保留位,可能以后有什么用,但現在還沒任何用處
  • opcode:描述了當前這個 websocket 報文是什么類型
    • 表示當前這是一個文本幀,還是一個二進制幀
    • 表示當前這是一個 ping 幀,還是一個 pong 幀(發 pingpong)
  • Payload len:表示當前數據包攜帶的數據載荷長度
    • 這個字段本身就是一個變長的,一個 websocket 數據報能承載的載荷長度是非常非常長的
  • Payload Data:實際報文要傳輸的數據載荷

握手過程(建立連接過程)

使用一個網頁端,嘗試和服務器建立 websocket 連接

  • 網頁端會先給服務器發起一個 HTTP 請求,這個 HTTP 請求中會帶有特殊的 header,比如:
    • Connection: Upgrade
    • Upgrade: Websocket
    • 這兩個 header 其實就是在告知服務器,我們要進行協議升級。如果服務器支持 websocket,就會返回一個特殊的 HTTP 響應,這個響應的狀態碼是 101(切換協議)
  • 客戶端和服務器之間就開始使用 websocket 進行通信了

這個過程就類似于:

  • 你跟外國人進行對話,你說:can you speak chinese?
  • 對面說:yes
  • 然后你們就開始用中文進行交流了

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

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

相關文章

時序模型介紹

一.整體介紹 1.單變量 vs 多變量時序數據 單變量就是只根據時間預測,多變量還要考慮用戶 2.為什么不能用機器學習預測: a.時間不是影響標簽的關鍵因素 b.時間與標簽之間的聯系過于弱/過于復雜,因此時序模型依賴于時間與時間的相關性來進行預…

尚硅谷redis7 86 redis集群分片之3主3從集群搭建

86 redis集群分片之3主集群搭建 3主3從redis集群配置 找3臺真實虛擬機,各自新建 m?dir -p /myredis/cluster 新建6個獨立的redis實例服務 IP:192.168.111.175端口6381/端口6382 vim /myredis/cluster/redisCluster6381.conf bind 0.0.0.0 daemonize yes protected-mode no …

Python服務器請求轉發服務

前言: 服務器無法連接外網 配置步驟 準備python腳本服務器內下載python 示例 1.下載python創建虛擬環境以及配置 -- 磁盤空間 df -h -- 下載apt sudo yum install apt -y-- 下載python pip sudo apt install python3 python3-pip python3-venv -y-- 測試查看 …

02.K8S核心概念

服務的分類 有狀態服務:會對本地環境產生依賴,例如需要把數據存儲到本地磁盤,如mysql、redis; 無狀態服務:不會對本地環境產生任何依賴,例如不會存儲數據到本地磁盤,如nginx、apache&#xff…

Java八股-Java優缺點,跨平臺,jdk、jre、jvm關系,解釋和編譯

java優勢劣勢? 優勢:面向對象,平臺無關,垃圾回收,強大的生態系統 劣勢:運行速度慢(相比于c和rust這樣的原生編譯語言會比較慢),語法繁瑣(相比于python&…

Attention Is All You Need論文閱讀筆記

Attention is All You Need是如今機器學習研究者必讀的論文,該文章提出的Transformer架構是如今很多機器學習項目的基礎,說該文章極大推動了機器學習領域的研究也不為過。 但這么重要,也是必讀的文章對初學者來說其實并不友好,很多…

【MAC】YOLOv8/11/12 轉換為 CoreML 格式并實現實時目標檢測

在本文中,我們將詳細介紹如何將 YOLOv8/11/12 模型轉換為 CoreML 格式,并使用該模型在攝像頭實時檢測中進行目標檢測。主要適用于M1、M2、M3、M4芯片的產品。 以下教程在YOLOv8/11/12均適用,此處就以 YOLOv11 舉例 目錄 前提條件YOLOv8/11/12 轉換為 CoreML實時目標檢測結論…

Redis--緩存擊穿詳解及解決方案

緩存擊穿 緩存擊穿問題也稱熱點key問題,就是一個高并發訪問(該key訪問頻率高,訪問次數多)并且緩存重建業務比較復雜的key突然失效了,大量的請求訪問會在瞬間給數據庫帶來巨大的沖擊。 緩存重建業務比較復雜&#xff…

UniApp X:鴻蒙原生開發的機會與DCloud的崛起之路·優雅草卓伊凡

UniApp X:鴻蒙原生開發的機會與DCloud的崛起之路優雅草卓伊凡 有句話至少先說,混開框架中目前uniapp x是率先支持了鴻蒙next的開發的,這點來說 先進了很多,也懂得審時度勢。 一、UniApp X如何支持鴻蒙原生應用? UniAp…

域名解析怎么查詢?有哪些域名解析查詢方式?

在互聯網的世界里,域名就像是我們日常生活中的門牌號,幫助我們快速定位到想要訪問的網站。而域名解析則是將這個易記的域名轉換為計算機能夠識別的IP地址的關鍵過程。當我們想要了解一個網站的域名解析情況,或者排查網絡問題時,掌…

算力卡上部署OCR文本識別服務與測試

使用modelscope上的圖像文本行檢測和文本識別模型進行本地部署并轉為API服務。 本地部署時把代碼中的檢測和識別模型路徑改為本地模型的路徑。 關于模型和代碼原理可以參見modelscope上這兩個模型相關的頁面: iic/cv_resnet18_ocr-detection-db-line-level_damo iic…

大語言模型的完整訓練周期從0到1的體系化拆解

以下部分內容參考了AI。 要真正理解大語言模型(LLM)的創生過程,我們需要將其拆解為一個完整的生命周期,每個階段的關鍵技術相互關聯,共同支撐最終模型的涌現能力。以下是體系化的訓練流程框架: 階段一&am…

吃水果(貪心)

文章目錄 題目描述輸入格式輸出格式樣例輸入樣例輸出提交鏈接提示 解析參考代碼 題目描述 最近米咔買了 n n n 個蘋果和 m m m 個香蕉,他每天可以選擇吃掉一個蘋果和一個香蕉(必須都吃一個,即如果其中一種水果的數量為 0 0 0,則…

【FAQ】HarmonyOS SDK 閉源開放能力 —Account Kit(4)

1.問題描述: LoginWithHuaweiIDButton不支持深色模式下定制文字和loading樣式? 解決方案: LoginWithHuaweiIDButtonParams 中的有個supportDarkMode屬性,設置為true后,需要自行響應系統的變化,見文檔&am…

【C語言】指針詳解(接)

前言: 文接上章,在上章節講解了部分指針知識點,在本章節為大家繼續提供。 六指針與字符串:C 語言字符串的本質 在 C 語言中,字符串實際上是一個以\0結尾的字符數組。字符串常量本質上是指向字符數組首元素的指針&…

第5講、Odoo 18 CLI 模塊源碼全解讀

Odoo 作為一款強大的企業級開源 ERP 系統,其命令行工具(CLI)為開發者和運維人員提供了極大的便利。Odoo 18 的 odoo/cli 目錄,正是這些命令行工具的核心實現地。本文將結合源碼,詳細解讀每個 CLI 文件的功能與實現機制…

如何將 PDF 文件中的文本提取為 YAML(教程)

這篇博客文章將向你展示如何將 PDF 轉換為 YAML,通過提取帶有結構標簽的標記內容來實現。 什么是結構化 PDF? 一些 PDF 文件包含結構化內容,也稱為帶標簽(tagged)或標記內容(marked content)&…

銀發團扎堆本地游,“微度假”模式如何盤活銀發旅游市場?

? 銀發微度假,席卷江浙滬 作者 | AgeClub呂嬈煒 前言 均價200-300元的兩天一夜微度假產品,正在中老年客群中走紅。 “我們屬于酒店直營,沒有中間商賺差價,老年人乘坐地鐵到目的地站,會有大巴負責接送,半…

蘋果iOS應用ipa文件進行簽名后無法連接網絡,我們該怎么解決

蘋果iOS應用ipa文件在經過簽名處理后,如果發現無法連接網絡,這可能會給用戶帶來極大的不便。為了解決這一問題,可以采取一系列的排查和解決步驟,以確保應用能夠順利地訪問互聯網。 首先,確保你的設備已經連接到一個穩…

MySQL 中 ROW_NUMBER() 函數詳解

MySQL 中 ROW_NUMBER() 函數詳解 ROW_NUMBER() 是 SQL 窗口函數中的一種,用于為查詢結果集中的每一行分配一個??唯一的連續序號??。與 RANK() 和 DENSE_RANK() 不同,ROW_NUMBER() 不會處理重復值,即使排序字段值相同,也會嚴格…