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

WebSocket全雙工通信SpringBoot實現(xiàn)

這篇具有很好參考價值的文章主要介紹了WebSocket全雙工通信SpringBoot實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【IT老齊238】十分鐘上手WebSocket全雙工通信協(xié)議_嗶哩嗶哩_bilibili【IT老齊238】十分鐘上手WebSocket全雙工通信協(xié)議, 視頻播放量 8348、彈幕量 23、點贊數(shù) 318、投硬幣枚數(shù) 157、收藏人數(shù) 257、轉(zhuǎn)發(fā)人數(shù) 30, 視頻作者 IT老齊, 作者簡介 老齊的個人V: itlaoqi001 ~~歡迎前來交流,相關(guān)視頻:基于redis訂閱消息和websocket技術(shù)實現(xiàn)的消息推送功能,【websocket】【前端】保證前端實時性的技術(shù):websocket,43 Spring Boot整合WebSocket詳解,SpringBoot WebSocket Echarts 服務(wù)器實時向客戶端推送數(shù)據(jù),12分鐘搞定基于websocket,springboot,vue的簡單聊天室。,WebFlux如何使用SSE做服務(wù)端的定向推送,springboot快速接入webSocket(心跳連接)- RuoYi-Vue-Plus系列教程,SpringBoot系列-Websocket 實時聊天,socket和websocket有什么區(qū)別?,【W(wǎng)ebSocket通信】網(wǎng)絡(luò)聊天室在線聊天系統(tǒng)___搭建自己的即時聊天室 WebSocket+Vue網(wǎng)絡(luò)聊天室在線聊天系統(tǒng)畢業(yè)源碼案例設(shè)計https://www.bilibili.com/video/BV1Kd4y1w7JR/?spm_id_from=333.337.search-card.all.click&vd_source=3b2d00a63e8d4ae7dea36274e5447a45

一、后端pom.xml引入依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>

二、啟動類注入Bean

@SpringBootApplication
public class TtSdemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(TtSdemoApplication.class, args);
    }
   
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }
}

三、編寫WebSocket類

package com.zj.ttsdemo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

/**
 * Created by
 *
 * @Author: JoyceZhang
 * @Date: 2023/05/25/15:28
 * @Description:
 */
@Slf4j
@ServerEndpoint(value="/websocket")
@Component
public class Websocket {
    private static Session[] sessionContainer = new Session[2];
    /**
     * A,B與服務(wù)器建立連接
     */
    @OnOpen
    public void onOpen(Session session) {
        if (sessionContainer[0] == null && sessionContainer[1] == null) {
            sessionContainer[0] = session;
            log.info("a連接成功");
        } else if (sessionContainer[0] != null && sessionContainer[1] == null) {
            sessionContainer[1] = session;
            log.info("b連接成功");
        } else {
            log.info("連接失敗");
        }
    }

    /**
     * 鏈接關(guān)閉
     */
    @OnClose
    public void onClose(Session session) {
        for(int i=0;i<sessionContainer.length;i++){
            if(sessionContainer[i] == session){
                sessionContainer[i] = null;
                log.info((i==0?"a":"b")+"斷開連接");
            }
        }
    }

    /**
     * 得到另一個session對象
     */
    private Session getOtherSession(Session session) {
       for(int i = 0; i<sessionContainer.length;i++){
           if(session == sessionContainer[i]){
               log.info("獲取到另一個session");
               return sessionContainer[(i==0?1:0)];
           }
       }
         return null;
    }


    /**
     * 向另一個session發(fā)送消息
     */
    @OnMessage
    public void sendMessage(String message,Session session) throws IOException{
        Session otherSession = this.getOtherSession(session);
        log.info("發(fā)送消息"+message+"到"+(otherSession==sessionContainer[0]?"a":"b"));
        otherSession.getBasicRemote().sendText(message);
    }

    /**
     * 異常處理
     */
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("發(fā)生錯誤");
        error.printStackTrace();
    }
}

四、編寫測試頁面

在resource/static目錄下編寫chat.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input id = "text" type ="text">
<button onclick = "send()">Send</button>
<button onclick = "closeWebSocket()">Close</button>
<div id = "message"></div>
</body>
<script type="text/javascript">
    var websocket = null;

    //判斷當(dāng)前瀏覽器是否支持WebSocket
    if('WebSocket' in window){
        websocket = new WebSocket("ws://localhost:8083/websocket");
    }
    else{
        alert('Not support websocket')
    }

    //連接發(fā)生錯誤的回調(diào)方法
    websocket.onerror = function(){
        setMessageInnerHTML("服務(wù)器通信故障");
    };

    //連接成功建立的回調(diào)方法
    websocket.onopen = function(event){
        setMessageInnerHTML("與服務(wù)器通信成功");
    }

    //接收到消息的回調(diào)方法
    websocket.onmessage = function(event){
        setMessageInnerHTML(event.data);
    }

    //連接關(guān)閉的回調(diào)方法
    websocket.onclose = function(){
        setMessageInnerHTML("WebSocket連接關(guān)閉");
    }

    //監(jiān)聽窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時,主動去關(guān)閉websocket連接,防止連接還沒斷開就關(guān)閉窗口,server端會拋異常。
    window.onbeforeunload = function(){
        websocket.close();
    }

    //將消息顯示在網(wǎng)頁上
    function setMessageInnerHTML(innerHTML){
        document.getElementById('message').innerHTML += innerHTML + '<br/>';
    }

    //關(guān)閉連接
    function closeWebSocket(){
        websocket.close();
    }

    //發(fā)送消息
    function send(){
        var message = document.getElementById('text').value;
        websocket.send(message);
    }
</script>
</html>

五、通信測試

WebSocket全雙工通信SpringBoot實現(xiàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-462888.html

到了這里,關(guān)于WebSocket全雙工通信SpringBoot實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 十分鐘實現(xiàn) Android Camera2 相機(jī)預(yù)覽

    十分鐘實現(xiàn) Android Camera2 相機(jī)預(yù)覽

    因為工作中要使用 Android Camera2 API ,但因為 Camera2 比較復(fù)雜,網(wǎng)上資料也比較亂,有一定入門門檻,所以花了幾天時間系統(tǒng)研究了下,并在 CSDN 上記錄了下,希望能幫助到更多的小伙伴。 Camera2 API 的包名是 android.hardware.camera2 ,是 Android 5.0 后推出的一套調(diào)用攝像頭設(shè)備的接口

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

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

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

    2024年02月19日
    瀏覽(27)
  • 使用cpolar內(nèi)網(wǎng)穿透實現(xiàn)公網(wǎng)遠(yuǎn)程訪問,十分鐘就可以學(xué)會使用

    使用cpolar內(nèi)網(wǎng)穿透實現(xiàn)公網(wǎng)遠(yuǎn)程訪問,十分鐘就可以學(xué)會使用

    1.自己有公網(wǎng)IP,進(jìn)入路由器做映射 2.自己有公網(wǎng)服務(wù)器搭建內(nèi)網(wǎng)穿透 3.通過第三方公網(wǎng)服務(wù)器進(jìn)行流量轉(zhuǎn)發(fā),映射本地端口 比較常見是第三種方式,不需要自己搭建服務(wù),也不用去申請公網(wǎng)IP、不用設(shè)置路由器,不論是本地開發(fā)測試,遠(yuǎn)程聯(lián)機(jī)還是遠(yuǎn)程訪問都支持,隨時可用

    2024年02月12日
    瀏覽(27)
  • 使用 PHP WorkerMan 構(gòu)建 WebSocket 全雙工群聊通信(二)

    在很早很早以前,WebSocket 協(xié)議還沒有被發(fā)明的時候,人們在 Web 端制作類實時數(shù)據(jù)動態(tài)更新時,一般采用輪詢、 長連接 (Long Polling) 來實現(xiàn)。大概就是: 輪詢:客戶端不停發(fā)送 HTTP 請求給服務(wù)端,服務(wù)端返回最新數(shù)據(jù) 長連接:客戶端發(fā)送一條 HTTP 請求給服務(wù)端,服務(wù)端 HOLD

    2024年02月09日
    瀏覽(23)
  • 還在苦惱如何開發(fā)一個Chrome插件嗎?十分鐘帶你實現(xiàn)一個實用小插件

    還在苦惱如何開發(fā)一個Chrome插件嗎?十分鐘帶你實現(xiàn)一個實用小插件

    你是否曾考慮過創(chuàng)建自己的 Chrome 插件,但又撓頭毫無思路?那么在接下來的幾分鐘里,我不僅會介紹 Chrome 瀏覽器擴(kuò)展的基本知識,還會指導(dǎo)你通過五個簡單的步驟來制作自己的擴(kuò)展。 知道怎么做嗎?讓我們一探究竟! 今年我們見證了人工智能能力的爆炸式增長。雖然cha

    2024年02月10日
    瀏覽(90)
  • 十分鐘掌握 Flink CDC,實現(xiàn)Mysql數(shù)據(jù)增量備份到Clickhouse [純干貨,建議收藏]

    十分鐘掌握 Flink CDC,實現(xiàn)Mysql數(shù)據(jù)增量備份到Clickhouse [純干貨,建議收藏]

    Clickhouse的優(yōu)點. 真正的面向列的 DBMS ClickHouse 是一個 DBMS,而不是一個單一的數(shù)據(jù)庫。它允許在運行時創(chuàng)建表和數(shù)據(jù)庫、加載數(shù)據(jù)和運行 查詢,而無需重新配置和重新啟動服務(wù)器。 數(shù)據(jù)壓縮 一些面向列的 DBMS(InfiniDB CE 和 MonetDB)不使用數(shù)據(jù)壓縮。但是,數(shù)據(jù)壓縮確實提高了

    2024年04月14日
    瀏覽(95)
  • 零編程經(jīng)驗,通過 GPT-4 十分鐘開發(fā)了一個瀏覽器插件,并成功運行,實現(xiàn)了需求目標(biāo)!

    零編程經(jīng)驗,通過 GPT-4 十分鐘開發(fā)了一個瀏覽器插件,并成功運行,實現(xiàn)了需求目標(biāo)!

    大佬藍(lán)鳥ID: sundyme 零編程經(jīng)驗,通過 GPT-4 十分鐘開發(fā)了一個瀏覽器插件,并成功運行,實現(xiàn)了需求目標(biāo)!太不可思意了,真正體會到了自然語言編程的魅力! 下一步是利用Pinterest 的 API 接口實現(xiàn)自動發(fā)圖,已經(jīng)生成好了代碼和步驟(看著挺靠譜),等明天開發(fā)者權(quán)限審核下

    2023年04月08日
    瀏覽(86)
  • 通俗易懂,十分鐘讀懂DES,詳解DES加密算法原理,DES攻擊手段以及3DES原理。Python DES實現(xiàn)源碼

    通俗易懂,十分鐘讀懂DES,詳解DES加密算法原理,DES攻擊手段以及3DES原理。Python DES實現(xiàn)源碼

    DES(Data Encryption Standard)是一種 對稱加密 算法。它是在20世紀(jì)70年代初期由IBM研發(fā)的。它的設(shè)計目標(biāo)是提供高度的數(shù)據(jù)安全性和性能,并且能夠在各種硬件和軟件平臺上實現(xiàn)。 DES使用56位的密鑰和64位的明文塊進(jìn)行加密。DES算法的分組大小是64位,因此,如果需要加密的明文長

    2024年02月03日
    瀏覽(28)
  • 十分鐘入門Zigbee

    十分鐘入門Zigbee

    大部分教程通常都是已Zigbee原理開始講解和學(xué)習(xí),各種概念讓初學(xué)者難以理解。本教程從一個小白的角度出發(fā),入門無需任何Zigbee底層原理知識,只需要基本的MCU研發(fā)經(jīng)驗就可以掌握,讓您快速實現(xiàn)zigbee組網(wǎng)和節(jié)點之間通信。 本教程采用泰凌微TLSR8258芯片,芯片資料鏈接TLS

    2023年04月09日
    瀏覽(106)
  • 每天十分鐘學(xué)會Spark

    每天十分鐘學(xué)會Spark

    Spark是什么 Spark是一種基于內(nèi)存的快速、通用、可拓展的大數(shù)據(jù)分析計算引擎。 Spark官網(wǎng):http://spark.apache.org/ Spark的特點 1、快速 ??一般情況下,對于迭代次數(shù)較多的應(yīng)用程序,Spark程序在內(nèi)存中的運行速度是Hadoop MapReduce運行速度的100多倍,在磁盤上的運行速度是Hadoop MapRedu

    2024年03月18日
    瀏覽(98)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包