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

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

這篇具有很好參考價(jià)值的文章主要介紹了【spring(六)】WebSocket網(wǎng)絡(luò)傳輸協(xié)議。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??鍵盤敲爛,年薪30萬??

目錄

核心概要:

概念介紹:

對(duì)比HTTP協(xié)議:?

WebSocket入門案例:?


核心概要:

websocket對(duì)比http

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

概念介紹:

? ? ? ? WebSocket是Web服務(wù)器的一個(gè)組件,WebSocket是一種基于TCP的新的網(wǎng)絡(luò)傳輸協(xié)議,它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信——瀏覽器只需要完成一次握手,兩者之間就可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。

深度理解:

????????前端發(fā)送請(qǐng)求建立連接,服務(wù)器接收到連接請(qǐng)求,與前端建立連接(基于WebSocket),前端發(fā)送請(qǐng)求到服務(wù)器,服務(wù)器給出響應(yīng),連接不會(huì)關(guān)閉,如果前端再次發(fā)送請(qǐng)求,服務(wù)器正常處理,直到這次連接關(guān)閉。

應(yīng)用場(chǎng)景:

? ? ? ? 例如 視頻彈幕,網(wǎng)頁(yè)聊天,瀏覽器的實(shí)時(shí)動(dòng)態(tài)。

對(duì)比HTTP協(xié)議:?

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

WebSocket入門案例:?

? ? ? ? 實(shí)現(xiàn)步驟:

  • 資源準(zhǔn)備:有html頁(yè)面作為客戶端
  • 服務(wù)器端導(dǎo)入WebSocket的maven坐標(biāo)
  • 導(dǎo)入WebSocket的服務(wù)器組件
  • 導(dǎo)入配置類,注冊(cè)WebSocket的服務(wù)端組件
  • 注冊(cè)一個(gè)定時(shí)任務(wù)類,用于測(cè)試。

? ? ? ? 分析:

WebSocketServer是接收響應(yīng)前端請(qǐng)求的,相當(dāng)于SpringMVC中的Controller。

前端代碼:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="UTF-8">
    <title>WebSocket Demo</title>
</head>
<body>
    <input id="text" type="text" />
    <button onclick="send()">發(fā)送消息</button>
    <button onclick="closeWebSocket()">關(guān)閉連接</button>
    <div id="message">
    </div>
</body>
<script type="text/javascript">
    var websocket = null;
    var clientId = Math.random().toString(36).substr(2);

    //判斷當(dāng)前瀏覽器是否支持WebSocket
    if('WebSocket' in window){
        //連接WebSocket節(jié)點(diǎn)
        websocket = new WebSocket("ws://localhost:8080/ws/"+clientId);
    }
    else{
        alert('Not support websocket')
    }

    //連接發(fā)生錯(cuò)誤的回調(diào)方法
    websocket.onerror = function(){
        setMessageInnerHTML("error");
    };

    //連接成功建立的回調(diào)方法
    websocket.onopen = function(){
        setMessageInnerHTML("連接成功");
    }

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

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

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

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

    //發(fā)送消息
    function send(){
        var message = document.getElementById('text').value;
        websocket.send(message);
    }
	
	//關(guān)閉連接
    function closeWebSocket() {
        websocket.close();
    }
</script>
</html>

導(dǎo)入maven坐標(biāo)

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>compile</scope>
        </dependency>

導(dǎo)入WebSocketServer代碼:

@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {

    //存放會(huì)話對(duì)象
    private static Map<String, Session> sessionMap = new HashMap();

    /**
     * 連接建立成功調(diào)用的方法
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("sid") String sid) {
        System.out.println("客戶端:" + sid + "建立連接");
        sessionMap.put(sid, session);
    }

    /**
     * 收到客戶端消息后調(diào)用的方法
     *
     * @param message 客戶端發(fā)送過來的消息
     */
    @OnMessage
    public void onMessage(String message, @PathParam("sid") String sid) {
        System.out.println("收到來自客戶端:" + sid + "的信息:" + message);
    }

    /**
     * 連接關(guān)閉調(diào)用的方法
     *
     * @param sid
     */
    @OnClose
    public void onClose(@PathParam("sid") String sid) {
        System.out.println("連接斷開:" + sid);
        sessionMap.remove(sid);
    }

    /**
     * 群發(fā)
     *
     * @param message
     */
    public void sendToAllClient(String message) {
        Collection<Session> sessions = sessionMap.values();
        for (Session session : sessions) {
            try {
                //服務(wù)器向客戶端發(fā)送消息
                session.getBasicRemote().sendText(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

導(dǎo)入WebSocketConfiguration代碼:

@Configuration
public class WebSocketConfiguration {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}

導(dǎo)入TASK代碼:

@Component
public class WebSocketTask {
    @Autowired
    private WebSocketServer webSocketServer;

    /**
     * 通過WebSocket每隔5秒向客戶端發(fā)送消息
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void sendMessageToClient() {
        webSocketServer.sendToAllClient("這是來自服務(wù)端的消息:" + DateTimeFormatter.ofPattern("HH:mm:ss").format(LocalDateTime.now()));
    }
}

測(cè)試:

【spring(六)】WebSocket網(wǎng)絡(luò)傳輸協(xié)議,spring,網(wǎng)絡(luò),spring,websocket文章來源地址http://www.zghlxwxcb.cn/news/detail-751354.html

到了這里,關(guān)于【spring(六)】WebSocket網(wǎng)絡(luò)傳輸協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【網(wǎng)絡(luò)】傳輸層協(xié)議介紹

    【網(wǎng)絡(luò)】傳輸層協(xié)議介紹

    ??TCP (Transmission Control Protocol )傳輸控制協(xié)議: 面向連接網(wǎng)絡(luò)協(xié)議 ,是指通信雙方之間在進(jìn)行通信之前要先建立連接。比如打電話,雙方通話前需要先建立連接。 ??TCP是面向連接的、可靠的進(jìn)程到進(jìn)程通信的協(xié)議。TCP提供全雙工服務(wù),即數(shù)據(jù)可在同一時(shí)間雙向傳輸,每一

    2024年02月06日
    瀏覽(26)
  • 傳輸層協(xié)議—網(wǎng)絡(luò)

    傳輸層協(xié)議—網(wǎng)絡(luò)

    TCP:傳輸?shù)臄?shù)據(jù)的控制,可靠和效率是成反比:越可靠,效率越低,TCP是綜合考慮了兩者,取的一個(gè)均衡,不是保證絕對(duì)意義的可靠,也不是絕對(duì)意義的效率最高 1.2.1確認(rèn)應(yīng)答機(jī)制 (1)發(fā)送的數(shù)據(jù),接收端需要返回確認(rèn)接收到數(shù)據(jù)報(bào)的應(yīng)答 (2)數(shù)據(jù)會(huì)進(jìn)行編號(hào),并使用32位

    2024年02月16日
    瀏覽(17)
  • 【JavaEE】傳輸層網(wǎng)絡(luò)協(xié)議

    1.1 特點(diǎn) 面向數(shù)據(jù)報(bào)(DatagramSocket) 數(shù)據(jù)報(bào)大小限制為64k 全雙工 不可靠傳輸 有接收緩沖區(qū),無發(fā)送緩沖區(qū) UDP的特點(diǎn),我理解起來就是工人組成的**“人工傳送帶”**: 面向數(shù)據(jù)報(bào)(DatagramSocket): 工人們能夠知道的只有裝貨物的袋子,并不知道里面裝的什么內(nèi)容,這個(gè)麻袋

    2024年02月19日
    瀏覽(17)
  • 【網(wǎng)絡(luò)】傳輸層TCP協(xié)議

    【網(wǎng)絡(luò)】傳輸層TCP協(xié)議

    目錄 一、概述 2.1 運(yùn)輸層的作用引出 2.2 傳輸控制協(xié)議TCP 簡(jiǎn)介 2.3 TCP最主要的特點(diǎn) 2.4 TCP連接 二、TCP報(bào)文段的首部格式 三、TCP的運(yùn)輸連接管理 3.1 TCP的連接建立(三次握手) 3.2 為什么是三次握手? 3.3 為何兩次握手不可以呢? 3.4 TCP的連接釋放(四次揮手) 3.5 為什么客戶端在TIME

    2024年01月23日
    瀏覽(17)
  • 網(wǎng)絡(luò)原理之傳輸層與網(wǎng)絡(luò)層重點(diǎn)協(xié)議

    網(wǎng)絡(luò)原理之傳輸層與網(wǎng)絡(luò)層重點(diǎn)協(xié)議

    目錄 傳輸層重點(diǎn)協(xié)議 TCP協(xié)議 TCP協(xié)議段格式 TCP原理 確認(rèn)應(yīng)答機(jī)制(安全機(jī)制) 超時(shí)重傳機(jī)制(安全機(jī)制) 連接管理機(jī)制(安全機(jī)制) 滑動(dòng)窗口(效率機(jī)制) 流量控制(安全機(jī)制) 擁塞控制(安全機(jī)制) 延遲應(yīng)答(效率機(jī)制) 捎帶應(yīng)答(效率機(jī)制) 其他特性:面向字節(jié)流

    2024年02月11日
    瀏覽(23)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】傳輸層協(xié)議 -- TCP協(xié)議

    【計(jì)算機(jī)網(wǎng)絡(luò)】傳輸層協(xié)議 -- TCP協(xié)議

    認(rèn)識(shí)可靠性 現(xiàn)在的計(jì)算機(jī)大多都是基于馮諾依曼體系結(jié)構(gòu)的 雖然這里的輸入設(shè)備、輸出設(shè)備、內(nèi)存、CPU是在同一個(gè)機(jī)器上的,但是它們彼此間卻是相互獨(dú)立的。如果它們之間要進(jìn)行通信,那就必須要用“線”連接起來,其中連接內(nèi)存和外設(shè)之間的“線”叫做IO總線,連接CP

    2024年02月14日
    瀏覽(36)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】傳輸層協(xié)議 -- UDP協(xié)議

    【計(jì)算機(jī)網(wǎng)絡(luò)】傳輸層協(xié)議 -- UDP協(xié)議

    傳輸層是計(jì)算機(jī)網(wǎng)絡(luò)中的一個(gè)重要層次,位于網(wǎng)絡(luò)層和應(yīng)用層之間,它的主要功能是為應(yīng)用層提供端到端的數(shù)據(jù)傳輸服務(wù),負(fù)責(zé)確保數(shù)據(jù)可靠傳輸、流浪控制和擁塞控制等。 傳輸層的兩個(gè)主要協(xié)議是傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP)。它們各自有不同的特點(diǎn)和用途

    2024年02月15日
    瀏覽(13)
  • 【網(wǎng)絡(luò)原理】應(yīng)用層協(xié)議 與 傳輸層協(xié)議

    【網(wǎng)絡(luò)原理】應(yīng)用層協(xié)議 與 傳輸層協(xié)議

    ?個(gè)人主頁(yè):bit me?? ?當(dāng)前專欄:Java EE初階?? 我們自己寫的應(yīng)用程序就是在應(yīng)用層 雖然應(yīng)用層里面有一些現(xiàn)成的協(xié)議,但是在實(shí)際工作中也會(huì)存在 自定義應(yīng)用層協(xié)議 (發(fā)明協(xié)議? 協(xié)議就是約定,約定好客戶端和服務(wù)器按照啥樣的格式來傳輸數(shù)據(jù) ) 那么應(yīng)用層協(xié)議如何

    2023年04月20日
    瀏覽(20)
  • 網(wǎng)絡(luò)安全——傳輸層安全協(xié)議

    網(wǎng)絡(luò)安全——傳輸層安全協(xié)議

    作者簡(jiǎn)介:一名云計(jì)算網(wǎng)絡(luò)運(yùn)維人員、每天分享網(wǎng)絡(luò)與運(yùn)維的技術(shù)與干貨。? ?座右銘:低頭趕路,敬事如儀 個(gè)人主頁(yè):網(wǎng)絡(luò)豆的主頁(yè)?????? 目錄 ?前言 一.傳輸層安全協(xié)議 二.SSL協(xié)議背景 1.SSL協(xié)議介紹 2.SSL協(xié)議三種安全特性 3.SSL之間通信 三.SSL協(xié)議簡(jiǎn)介 1.SSL兩層組成

    2024年02月03日
    瀏覽(50)
  • 【傳輸層】網(wǎng)絡(luò)基礎(chǔ) -- UDP協(xié)議 | TCP協(xié)議

    【傳輸層】網(wǎng)絡(luò)基礎(chǔ) -- UDP協(xié)議 | TCP協(xié)議

    端口號(hào)(Port)標(biāo)識(shí)了一個(gè)主機(jī)上進(jìn)行通信的不同的應(yīng)用程序 在TCP/IP協(xié)議中,用 “源IP”, “源端口號(hào)”, “目的IP”, “目的端口號(hào)”, “協(xié)議號(hào)” 這樣一個(gè)五元組來標(biāo)識(shí)一個(gè)通信(可以通過 netstat -n 查看) 0 - 1023:知名端口號(hào),HTTP,F(xiàn)TP,SSH等這些廣為使用的應(yīng)用層協(xié)議,他

    2024年02月09日
    瀏覽(54)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包