零基礎做項目---五子棋對戰---day01

創建項目

這里使用阿里云服務器

?

https://start.aliyun.com/

勾選

  • MyBatis Framework (在SQL分類下)
  • MySQL Driver (在SQL分類下)
  • WebSocket (在Messaging分類下)
  • Spring Web (在Web分類下)

項目結構

消息發送機制

按照當前已有的知識,主要是HTTP HTTP自身是難以實現這種消息推送效果的~~
HTTP要想實現類似的效果,就需要基于“輪詢”的機制~~

消息推送機制--服務器發送事件 (SSE)

我之前學習過的服務器開發,主要是這樣的模型:
客戶端,主動向服務器發起請求,服務器收到之后,返回一個響應。
如果客戶端不主動發起請求,服務器是不能主動聯系客戶端的~~

這就是消息推送機制

輪詢機制

?????


?

?判斷輪訓or消息推送

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

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

這就類似于去餐館吃飯~~
1.每隔1分鐘,就去前臺看一眼,問問老板,,我的飯好了沒~~
2.我直接找個角落坐下來,玩手機~~啥時候飯做好了,老板就端過來了~~

明顯方案2更好,方案2就是服務器發送事件 (SSE)

但是缺點是只支持單向通信:SSE 只支持從服務器到客戶端的單向通信,不能用于雙向實時通信。

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

websocket介紹

需要注意的是ws => websocket,不是"猥瑣”的縮寫~ (滑稽)

websocket報文格式

是一個應用層協議, 下層是基于TCP的

十分顯而易見, 文本幀就是傳輸文本數據(比如JSON格式), 二進制幀就是傳輸二進制數據(比如圖片、文件、音頻流等)

提示一下, 這里Ping幀和Pong幀通常被用作心跳包,用于檢測連接的狀態,確保客戶端和服務器之間的連接是活躍的。

  • Ping幀:由一端(通常是服務器)發送,表示一個心跳請求。
  • Pong幀:由接收到Ping幀的另一端(通常是客戶端)發送,作為回應。

通過定期發送Ping幀并接收Pong幀,可以檢測到連接是否正常以及是否需要重新建立連接。

Payload len: 當前數據報文攜帶的數據載荷長度。

  • 這個字段本身就是一個變長的,WebSocket數據報能夠承載的載荷長度是非常長的。

  • Payload data: 實際的傳輸數據。

websocket握手過程

websocket握手過程(建立連接的過程)
使用網頁端,嘗試和服務器建立websocket連接.
網頁端會先給服務器發起一個HTTP請求~~這個HTTP請求中會帶有特殊的header

Connection: Upgrade
Upgrade: Websocket

這兩個header 其實就是在告知服務器,我們要進行協議升級,

如果服務器支持 websocket,就會返回一個特殊的HTTP響應~~這個響應的狀態碼是101.(切換協議)
客戶端和服務器之間就開始使用 websocket來進行通信了~~

編寫一個簡單的websocket代碼

編寫服務器(Java)

TestAPI extends這個類

public class TestAPI extends TextWebSocketHandler {

看看可以重寫哪些方法

?

重寫這四個方法

每個添加打印到控制臺的信息

新建文件WebSocketConfig

TestAPI加上注解@Component

?

編寫客戶端(JS)

前后端函數都是一一對應, 只不過函數方法名字不一樣, 意義都是一樣的

js完整代碼:?

<script>// 創建websocket實例let websocket = new WebSocket("ws://127.0.0.1:8080/test");//給實例掛載一些回調函數websocket.onopen = function () {console.log("連接建立");}websocket.onclose = function () {console.log("連接關閉");}websocket.onerror = function () {console.log("出現錯誤");}websocket.onmessage = function (e) {console.log("收到消息 "+ e.data);}//實現點擊按鈕后, 通過websocket發送請求//querySelector是id選擇器let input = document.querySelector("#message");let button = document.querySelector("#submit");button.onclick = function () {console.log("發送消息: "+input.value);websocket.send(input.value);}</script>

演示

訪問?http://127.0.0.1:8080/TestAPI.html

連接建立

發送消息

那么如何實現服務器端也發送消息呢

@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println("收到消息 "+ message.getPayload());session.sendMessage(message);System.out.println("發送消息 " +message.getPayload());}

只需要在

重啟服務

至此, WebSocket示例已經完成

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

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

相關文章

c++ 里如何檢測內存泄露:比如用了 new ,但沒有用 delete

&#xff08;1 方法一&#xff09; 用 MFC 框架的 F5 不帶斷點的調試。可以在輸出窗口提示是否有內存泄露。 &#xff08;2 方法二&#xff09; &#xff0c;在 main 函數中添加如下代碼&#xff0c;用 F5 不帶斷點的調試&#xff1a; int main() {_CrtSetDbgFlag( _CRTDBG_A…

vue.js微商城后臺管理系統

一.需要運行的效果 20240701-231456 二.代碼&#xff08;解析&#xff09; 首先&#xff0c;為項目添加依賴&#xff1a; yarn add element-plus --save yarn vue-router4 --save 新建一個項目包&#xff0c;然后命名為商品管理&#xff0c;在components中新建幾個vue文件。 …

React Hooks 深度解析

Hooks簡介 誕生背景&#xff1a; 在React 16.8之前的版本中&#xff0c;組件主要分為函數組件和類組件兩大類。函數組件簡單輕量&#xff0c;但不支持狀態&#xff08;state&#xff09;和生命周期方法&#xff1b;而類組件雖然功能強大&#xff0c;但編寫和維護起來相對復雜。…

驅動開發系列-如何與硬件通信

目錄 一:概述 二:I/O端口和I/O內存的概念 三:硬件寄存器(I/O寄存器)和內存 四:使用I/O端口 一:概述 驅動程序是軟件與硬件之間的抽象層;因此,它需要與這兩者對話,本文將向你展示驅動程序如何與硬件對話。并介紹I/O端口和I/O內存的概念。 二:I/O端口和I/O…

C++新特性

C新特性主要體現在語法改進和標準庫擴充兩個方面。以下是一些主要的C新特性&#xff1a; 語法改進 統一的初始化方法&#xff1a;C11擴大了用大括號括起的列表&#xff08;初始化列表&#xff09;的使用范圍&#xff0c;使其可用于所有的內置類型和用戶自定義的類型。這種定義…

【C語言】指針(1)--入門理解

目錄 一、內存和地址 二、指針變量和地址 三、指針變量類型的意義 一、內存和地址 只要講指針就離不開內存 因為指針就是訪問內存的 計算上CPU&#xff08;中央處理器&#xff09;在處理數據的時候&#xff0c;需要的數據是在內存中讀取的&#xff0c;處理后的數 據也會放…

PY32F030高性能單片機,主頻高達48M,最大64 KB 閃存,8 KB SRAM

PY32F030是普冉的一顆32位高性能MCU&#xff0c;采用32 位 ARM Cortex-M0 內核&#xff0c;高達16~64 Kbytes Flash 和 2~8 Kbytes SRAM 存儲器&#xff0c;最高 48 MHz 工作頻率。PY32F030 單片機的工作溫度范圍為 -40 ~ 105 C&#xff0c;工作電壓范圍為1.7 ~ 5.5 V&#xff…

Centos7刪除MariaDB

在 CentOS 7 上刪除 MariaDB 可以通過 yum 包管理器來完成。以下是一步一步的指導&#xff1a; 打開終端&#xff1a;首先&#xff0c;你需要打開你的 CentOS 7 系統的終端。 停止 MariaDB 服務&#xff08;如果正在運行&#xff09;&#xff1a;在卸載 MariaDB 之前&#xff…

IDEA實現遠程Debug的步驟與方法

IDEA實現遠程Debug的步驟與方法 在軟件開發過程中&#xff0c;遠程Debug是一個非常重要的功能&#xff0c;它允許開發者在本地IDE中調試遠程服務器上的應用程序。IntelliJ IDEA作為一款強大的Java開發工具&#xff0c;提供了豐富的遠程Debug功能。本文將詳細介紹如何使用IDEA實…

多語言版在線出租車預訂完整源碼+用戶應用程序+管理員 Laravel 面板+ 司機應用程序最新版源碼

源碼帶PHP后臺客戶端源碼 Flutter 是 Google 開發的一款開源移動應用開發 SDK。它用于開發 Android 和 iOS 應用&#xff0c;也是為 Google Fuchsia 創建應用的主要方法。Flutter 小部件整合了所有關鍵的平臺差異&#xff0c;例如滾動、導航、圖標和字體&#xff0c;可在 iOS 和…

DevOps實戰:使用GitLab+Jenkins+Kubernetes(k8s)建立CI_CD解決方案

一.系統環境 本文主要基于Kubernetes1.21.9和Linux操作系統CentOS7.4。 服務器版本docker軟件版本Kubernetes(k8s)集群版本CPU架構CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12v1.21.9x86_64CI/CD解決方案架構圖:CI/CD解決方案架構圖描述:程序員寫好代碼之…

ASP.NET MVC-razor編寫-2-svg中使用js+添加事件監聽

環境&#xff1a;win10 效果 初始狀態&#xff1a; 鼠標移入某個text&#xff08;比如KS primer&#xff09;時&#xff0c;text和連接的線條與箭頭都變色&#xff1a; 鼠標移出時回復正常。 如果是移入另一種紅色的text&#xff08;比如Cell Sceening Tag&#xff09;&…

創建本地倉庫

一、新建掛載目錄 二、將掛載本地鏡像掛載到目錄 三、配置yum倉庫 一、新建掛載目錄 mkdir /BenDiCangKu 二、將掛載本地鏡像掛載到目錄 1、先連接本地光盤 2、掛載光盤 mount /dev/sr0 /BenDiCangKu 3、查看掛載 由此可見掛載成功 三、配置yum倉庫 1、新建yum倉庫文件…

php簡單商城小程序系統源碼

&#x1f6cd;?【簡單商城小程序】&#x1f6cd;? &#x1f680;一鍵開啟&#xff0c;商城搭建新體驗&#x1f680; 你還在為繁瑣的商城搭建流程頭疼嗎&#xff1f;現在&#xff0c;有了簡單商城系統小程序&#xff0c;一切變得輕松又快捷&#xff01;無需復雜的編程知識&a…

構建Android studio版的CarSystemUI工程時因為包名一致導致BuildConfig問題

項目場景&#xff1a; 公司計劃開發杰發AC8025-Android 12版本車載平臺&#xff0c;前期預研需要構建Android studio版的CarSystemUI工程 問題描述 AAOS車載項目里面的CarSystemUI源碼默認無Android studio版本&#xff0c;為了后期快速開發調試需要構建Android studio能直接…

STM32基礎知識

一.STM32概述 第一款STM32單片機發布的時間為2007年6月11日。由意法半導體&#xff08;ST&#xff09;公司推出&#xff0c;是STM32系列中的首款產品&#xff0c;具體型號為STM32F1&#xff0c;它是一款基于Cortex-M內核的32位微控制器&#xff08;MCU&#xff09;。 STM32F1…

【openstack基礎操作】

openstack 常用命令 source ~/base/src/kayobe-config/etc/kolla/admin-openrc.sh https://docs.openstack.org//kayobe/latest/doc-kayobe.pdf 鏡像下載點 http://cloud.centos.org/centos/7/images/創建虛擬機 openstack server create --image 13d0686a-a7cc-4cc6-8bf7-76…

2024年【湖北省安全員-C證】考試資料及湖北省安全員-C證考試試卷

題庫來源&#xff1a;安全生產模擬考試一點通公眾號小程序 湖北省安全員-C證考試資料是安全生產模擬考試一點通生成的&#xff0c;湖北省安全員-C證證模擬考試題庫是根據湖北省安全員-C證最新版教材匯編出湖北省安全員-C證仿真模擬考試。2024年【湖北省安全員-C證】考試資料及…

JS+CSS+HTML項目-中國國家圖書館

頁面做的不多&#xff0c;CSS效果請看嗶哩嗶哩

英智玲瓏一體機在律所能做什么

只要不開庭&#xff0c;學習就不能停 好的律師是法律知識的百科全書 要精通、全面理解各類型的法律 還要不斷學習更新的條例釋義 一天即使工作24小時 也有忙不完的文書起草&#xff0c;資料核對&#xff0c;案情分析整理 有了英智玲瓏一體機&#xff0c;這些都不是難題&am…