国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

[前端基礎(chǔ)]websocket協(xié)議

這篇具有很好參考價值的文章主要介紹了[前端基礎(chǔ)]websocket協(xié)議。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

(1)websocket

websocket(簡寫為ws),是一種輕量化的協(xié)議,經(jīng)過最開始的握手階段以后,前后端之間允許自由地發(fā)送信息不受限制(建議發(fā)送json字符串).雖然理論上這個東西是屬于協(xié)議內(nèi)容,但是已經(jīng)被瘋狂封裝得像框架一樣了.

websocket協(xié)議具有天然的優(yōu)勢處理前端多線程并發(fā),并且只需要一個后端就能完成服務(wù).在各大視頻網(wǎng)站上經(jīng)常能見到使用ws技術(shù)構(gòu)建的簡單聊天室項目.難能可貴的是,java,javascript都引入了相關(guān)的內(nèi)容.

本文主要介紹使用,對標面向?qū)ο蟮膶嶒?需要詳細看待原理建議去看文檔內(nèi)容

另外,websocket最重要的是四種狀態(tài)和他們的監(jiān)聽函數(shù),open,close,message,error

分別代表:某個用戶開啟服務(wù),某個用戶關(guān)閉服務(wù),某一端接收信息,某一端發(fā)生錯誤

(2)前端部署和發(fā)送信息

1.在前端部署websocket內(nèi)容

 websocket ws = new WebSocket("ws://127.0.0.1:8080/imserver/" + MyUsername);

很簡單,直接創(chuàng)建websocket即可連接到后端(后端這個網(wǎng)址怎么來的我們后續(xù)再討論,這個myUsername是我自己加上的內(nèi)容,相當于傳入一個參數(shù),可以先不用管)

2.前端發(fā)送信息

      let oj={
        signal:8,
        to:self.counterpart
      }
      self.ws.send(JSON.stringify(oj));

我這里舉了個例子,建立了一個對象,然后轉(zhuǎn)化為json字符串,直接找到對應(yīng)的ws對象,然后使用send即可

3.前端接收信息

前端接收信息和厚度按一樣,建立事件監(jiān)聽器,然后創(chuàng)建回調(diào)函數(shù)

    this.ws.onopen = function () {
      
    }

    this.ws.onclose=function(){
    
    }

    this.ws.onmessage = function (event) {
     //event是個接收到的1信息
    }

(3)后端部署websocket

后端部署websocket有點麻煩....這里主要講解springboot框架下的部署

首先在pom文件中部署如下幾個依賴

 <!--websocket啟動器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <!--web啟動器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--熱部署內(nèi)容(不知道是干啥的)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

然后創(chuàng)建如下幾個文件

前端websocket,前端,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

?webConfig,這個是打開后端的攔截器,防止出現(xiàn)不能訪問的情況

package com.example.demochat.common.Config;

import com.example.demochat.component.AuthInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/**").excludePathPatterns("/imserver/**");
    }
    
}

websocketConfig,ws有關(guān)的部署

package com.example.demochat.common.Config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Configuration
public class WebSocketConfig {
    @Bean
    public ServerEndpointExporter serverEndpointExporter(){
        return new ServerEndpointExporter();
    }
}

鏈接的時候用到的一個繼承類

package com.example.demochat.component;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
public class AuthInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在此處實現(xiàn)身份驗證邏輯
        return true; // true 表示繼續(xù)執(zhí)行后續(xù)的攔截器或處理器方法,false 則會中斷請求處理
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        // 請求處理之后進行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // 在整個請求結(jié)束之后被調(diào)用,也就是在DispatcherServlet渲染了對應(yīng)的視圖之后執(zhí)行(主要是用于資源清理工作)
    }
}

最后是核心文件,前端websocket,前端,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

這個東西里面就是我們websocket的基本邏輯

首先是建立一個鏈接,要借用注解來聲明這里是都服務(wù)器的終端

里面會用到那些監(jiān)聽方法,有一個好消息是,我們不需要繼承websocket這個類或者說這個接口,然后重寫里面的方法.現(xiàn)在可以通過注釋來給幾個監(jiān)聽函數(shù)添加具體的回調(diào)

//建立一個雙通道的webSocket類

@ServerEndpoint("/imserver/{username}")
//這是一個聲明,聲明這里是服務(wù)器的終端,可以通過這個路徑訪問
//{}代表占位符,可以通過@PathParam注解獲取這個參數(shù)

@Component
public class WebSocketServer {

    //下面是四個基礎(chǔ)方法,當觸發(fā)對應(yīng)事件的時候,注解就會調(diào)用這些方法


    @OnOpen
    public void onOpen(Session session, @PathParam("username") String username) throws IOException {
           
    }

    //移除某個用戶
    @OnClose
    public void onClose(Session session, @PathParam("username") String username) throws IOException {
           
    }

  
    @OnMessage
    public void onMessage(String message,Session session,@PathParam("username") String username) throws IOException {
           
    }


    @OnError
    public void onError(Session session , Throwable err){//這里的參數(shù)類型必須是可拋出"Throwable"
      
    }

}

對應(yīng)的注解,標志著這個函數(shù)會在什么事件發(fā)生的時候調(diào)用

另外注意其中的參數(shù),Session對象代表的是當前觸發(fā)事件的具體對象,也就是前端窗口/用戶,當用戶觸發(fā)對應(yīng)事件的時候,就會填入對應(yīng)參數(shù)中message參數(shù)代表的是傳遞進來的信息

Throwable是需要拋出的從錯誤

這些參數(shù)是必須的

2.后端發(fā)送請求:

 session.getBasicRemote().sendText(message);
直接讓對應(yīng)的窗口對象接收即可

利用session對象的對應(yīng)方法發(fā)送消息即可文章來源地址http://www.zghlxwxcb.cn/news/detail-718882.html

到了這里,關(guān)于[前端基礎(chǔ)]websocket協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【spring(六)】WebSocket網(wǎng)絡(luò)傳輸協(xié)議

    【spring(六)】WebSocket網(wǎng)絡(luò)傳輸協(xié)議

    ??鍵盤敲爛,年薪30萬?? 目錄 核心概要: 概念介紹: 對比HTTP協(xié)議:? WebSocket入門案例:? websocket對比http ? ? ? ? WebSocket是Web服務(wù)器的一個組件,WebSocket是一種基于TCP的新的 網(wǎng)絡(luò)傳輸協(xié)議 ,它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信——瀏覽器只需要完成 一次握手 ,兩者之

    2024年02月05日
    瀏覽(20)
  • WebSocket | 基于TCP的全雙工通信網(wǎng)絡(luò)協(xié)議

    WebSocket | 基于TCP的全雙工通信網(wǎng)絡(luò)協(xié)議

    ???作者介紹:雙非本科大三網(wǎng)絡(luò)工程專業(yè)在讀,阿里云專家博主,專注于Java領(lǐng)域?qū)W習,擅長web應(yīng)用開發(fā)、數(shù)據(jù)結(jié)構(gòu)和算法,初步涉獵Python人工智能開發(fā)和前端開發(fā)。 ??主頁:@逐夢蒼穹 ??所屬專欄:Java EE ? 您的一鍵三連,是我創(chuàng)作的最大動力?? WebSocket 是基于 TCP 的一

    2024年02月19日
    瀏覽(27)
  • 持久雙向通信網(wǎng)絡(luò)協(xié)議-WebSocket-入門案例實現(xiàn)demo

    持久雙向通信網(wǎng)絡(luò)協(xié)議-WebSocket-入門案例實現(xiàn)demo

    1 介紹 WebSocket 是基于 TCP 的一種新的 網(wǎng)絡(luò)協(xié)議 。它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信——瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就可以創(chuàng)建 持久性 的連接, 并進行 雙向 數(shù)據(jù)傳輸。 HTTP協(xié)議和WebSocket協(xié)議對比: HTTP是 短連接 (一次響應(yīng)完即消除) WebSocket是 長連接

    2024年01月16日
    瀏覽(22)
  • 網(wǎng)絡(luò)通信協(xié)議-HTTP、WebSocket、MQTT的比較與應(yīng)用

    網(wǎng)絡(luò)通信協(xié)議-HTTP、WebSocket、MQTT的比較與應(yīng)用

    在今天的數(shù)字化世界中,各種通信協(xié)議起著關(guān)鍵的作用,以確保信息的傳遞和交換。HTTP、WebSocket?和?MQTT?是三種常用的網(wǎng)絡(luò)通信協(xié)議,它們各自適用于不同的應(yīng)用場景。本文將比較這三種協(xié)議,并探討它們的主要應(yīng)用領(lǐng)域。 HTTP (超文本傳輸協(xié)議) HTTP ?是最常見的協(xié)議之一

    2024年02月05日
    瀏覽(40)
  • Websocket、Session&Cookie、前端基礎(chǔ)知識

    Websocket、Session&Cookie、前端基礎(chǔ)知識

    目錄 1.Websocket Websocket與HTTP的介紹 不同使用場景 Websocket鏈接過程 2.SessionCookie Cookie的工作原理 Session的工作原理 區(qū)別 3.前端基礎(chǔ)知識 HTTP: 1. HTTP 是單向的,客戶端發(fā)送請求,服務(wù)器發(fā)送響應(yīng)。每個 HTTP 或 HTTPS 請求每次都會新建與服務(wù)器的連接,并且在獲得響應(yīng)后,連接將自

    2024年02月10日
    瀏覽(48)
  • 【001_IoT/物聯(lián)網(wǎng)通信協(xié)議基礎(chǔ): HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂】

    【001_IoT/物聯(lián)網(wǎng)通信協(xié)議基礎(chǔ): HTTP、Websocket、MQTT、AMQP、COAP、LWM2M一文搞懂】

    學歷代表過去、能力代表現(xiàn)在、學習力代表將來。 一個良好的學習方法是通過輸出來倒逼自己輸入。寫博客既是對過去零散知識點的總結(jié)和復盤,也是參加了 零聲教育 寫博客活動。 零聲教育體驗課:https://xxetb.xetslk.com/s/3fbO81 本文是開發(fā)過程中的知識點總結(jié),供大家學習交

    2024年04月22日
    瀏覽(20)
  • 網(wǎng)絡(luò)基礎(chǔ)知識:了解網(wǎng)絡(luò)協(xié)議的組成和常見的網(wǎng)絡(luò)協(xié)議

    網(wǎng)絡(luò)基礎(chǔ)知識,了解網(wǎng)絡(luò)協(xié)議的組成和常見的網(wǎng)絡(luò)協(xié)議 1、協(xié)議及協(xié)議棧的基本概念 1.1、什么是協(xié)議 協(xié)議是網(wǎng)絡(luò)中計算機或設(shè)備之間進行通信的一系列規(guī)則的集合。常用協(xié)議有IP、TCP、HTTP、POP3、SMTP等。 1.2、什么是協(xié)議棧 在網(wǎng)絡(luò)中,為了完成通信,必須使用多層上的多種協(xié)

    2024年02月07日
    瀏覽(31)
  • 【計算機網(wǎng)絡(luò)】網(wǎng)絡(luò)基礎(chǔ)--協(xié)議/網(wǎng)絡(luò)協(xié)議/網(wǎng)絡(luò)傳輸流程/地址管理

    【計算機網(wǎng)絡(luò)】網(wǎng)絡(luò)基礎(chǔ)--協(xié)議/網(wǎng)絡(luò)協(xié)議/網(wǎng)絡(luò)傳輸流程/地址管理

    網(wǎng)絡(luò)的發(fā)展分為一下幾個階段: 獨立模式: 計算機之間相互獨立: 此時計算機之間是相互獨立的,每個人在執(zhí)行任務(wù)的時候是獨立的,需要等待前一個將任務(wù)完成之后,自己才能進行執(zhí)行任務(wù),是串行執(zhí)行的,效率很低。 網(wǎng)絡(luò)互聯(lián): 多臺計算機連接在一起, 完成數(shù)據(jù)共享:

    2024年02月03日
    瀏覽(31)
  • 網(wǎng)絡(luò)基礎(chǔ)與網(wǎng)絡(luò)協(xié)議

    網(wǎng)絡(luò)基礎(chǔ)與網(wǎng)絡(luò)協(xié)議

    抽象語言——電腦(加工)——二進制——抽象語言 應(yīng)用層: 跟人進行交互(人機交互)——我們給他輸入抽象語言——編碼——后臺程序 表示層: 將“編碼”轉(zhuǎn)化為電腦可以識別的二進制 介質(zhì)訪問控制層(MAC): MAC地址是網(wǎng)卡決定的,是固定的。 物理層: 人類最早的

    2024年02月22日
    瀏覽(23)
  • 前端面試:【網(wǎng)絡(luò)協(xié)議與性能優(yōu)化】提升Web應(yīng)用性能的策略

    嗨,親愛的Web開發(fā)者!構(gòu)建高性能的Web應(yīng)用是每個開發(fā)者的夢想。本文將介紹一些性能優(yōu)化策略,包括資源加載、懶加載和CDN等,以幫助你提升Web應(yīng)用的性能。 1. 性能優(yōu)化策略: 壓縮資源: 使用Gzip或Brotli等壓縮算法來減小CSS和JavaScript文件的大小,加快加載速度。 合并文件

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包