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

Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解)

這篇具有很好參考價(jià)值的文章主要介紹了Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解)

主要解決存在的疑問

  1. 為什么存在2種spring整合websocket的方式,一種是使用@ServerEndpoint注解的方式,一種是使用@EnableWebSocket注解的方式,這2種有什么區(qū)別和聯(lián)系?可以共存嗎?它們實(shí)現(xiàn)的原理是什么?它們的各種配置到底是什么意思?@EnableWebSocket是如何完成配置的?
  2. 在服務(wù)端和客戶端建立websocket連接的時(shí)候,如何做認(rèn)證?不能讓任意的客戶端連接到websocket服務(wù)端,而且不應(yīng)該在建立websocket連接之后再認(rèn)證,而是應(yīng)該在握手的時(shí)候,就去做認(rèn)證,該如何實(shí)現(xiàn)?

Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解),# websocket,java,websocket,學(xué)習(xí)

spring、tomcat是如何配合完成websocket

這篇文章覺得不錯(cuò),原文地址:spring、tomcat是如何配合完成websocket

綜述

像IM這一類web系統(tǒng),需要有機(jī)制知道是否有新消息,沒有websocket前主要靠輪訓(xùn)。
輪訓(xùn)頻率設(shè)得過高,有效輪訓(xùn)率低,不僅消耗網(wǎng)絡(luò)資源,還占用cpu資源;輪訓(xùn)頻率設(shè)得過低,又會(huì)造成消息延時(shí)較大。
為此誕生了websocket,消息可以由服務(wù)端主動(dòng)推送到客戶端,不僅實(shí)時(shí)性高,效率也是拉滿。
為了盡量減少對(duì)現(xiàn)有系統(tǒng)進(jìn)行改造,websocket是在建立在http的基礎(chǔ)之上的,這樣不僅可以復(fù)用http的端口,服務(wù)端及客戶端的改造都更小。

websocket協(xié)議

Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解),# websocket,java,websocket,學(xué)習(xí)

  1. 握手階段:如上所述websocket是基于http,主要是握手階段仍使用http協(xié)議,當(dāng)HTTP處理器發(fā)現(xiàn)頭部帶“Upgrade: websocket”,則認(rèn)為連接是要升級(jí)到websocket的協(xié)議;如果支持websocket則返回允許升級(jí)到websocket的響應(yīng)。
  2. 通信階段:客戶端接受到服務(wù)端允許升級(jí)協(xié)議的響應(yīng)后,則認(rèn)為握手完成,后續(xù)都以websocket格式發(fā)送報(bào)文。

websocke報(bào)文格式如下:
Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解),# websocket,java,websocket,學(xué)習(xí)
websocket協(xié)議本身很簡單,各個(gè)字段的含義可以參考其他文章,這里不再詳述,本文主要分析tomcat如何實(shí)現(xiàn)websocket以及spring boot如何基于tomcat集成websocket。

本文基于tomcat NIO模式進(jìn)行分析。

分析前可以大致梳理一下,有哪些關(guān)鍵點(diǎn)。

  1. tomcat NIO模式下,會(huì)為每個(gè)請(qǐng)求分配一個(gè)線程進(jìn)行處理,websocket是長連接,這個(gè)線程是否會(huì)與websocket連接綁定,而一直被同一個(gè)websocket占有。
  2. websocket協(xié)議升級(jí)是在那個(gè)點(diǎn)觸發(fā)的。
  3. tomcat是如何在http的基礎(chǔ)之上支持websocket
  4. tomcat的websocket是如何暴露接口給spring去集成的。

tomcat NIO模式下線程模型

Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解),# websocket,java,websocket,學(xué)習(xí)
各個(gè)線程的初始化詳見org.apache.tomcat.util.net.NioEndpoint#startInternal

  1. Acceptor線程主邏輯用于調(diào)用accept方法接受請(qǐng)求,生成socket并在Poller中注冊(cè)
  2. Poller線程主邏輯是調(diào)用select方法,獲取可讀寫的socket,并創(chuàng)建SocketProcessor,并丟給Processor線程進(jìn)行處理。
  3. Processor線程主要邏輯是根據(jù)協(xié)議解析socket中的數(shù)據(jù),并調(diào)用servlet容器進(jìn)行業(yè)務(wù)處理。

tomcat NIO模式下請(qǐng)求處理流程

Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解),# websocket,java,websocket,學(xué)習(xí)
本文不詳細(xì)解析tomcat的內(nèi)部實(shí)現(xiàn),http協(xié)議本身很簡單,沒有握手的過程,僅僅只是簡單的請(qǐng)求/應(yīng)答。理論上,只需要 接受請(qǐng)求 -> 解析報(bào)文 -> 丟給servlet處理 這幾個(gè)過程。
tomcat為了實(shí)現(xiàn)更豐富的功能抽象出Engine,Host,Context等概念,為了便于理解我們簡化一下tomcat模型,我們將CoyoteAdapter到StandardWrapper當(dāng)成servlet容器內(nèi)部的行為,將其合并為Servlet Container,其功能就是將request路由到正確的servlet進(jìn)行處理。
那么請(qǐng)求的處理過程可以簡化成

Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解),# websocket,java,websocket,學(xué)習(xí)文章來源地址http://www.zghlxwxcb.cn/news/detail-729767.html

  1. SocktProcessor主要做協(xié)議解析,將socket中的字節(jié)流轉(zhuǎn)換成一幀幀HTTP報(bào)文
  2. servlet container主要請(qǐng)求路由,跟url信息轉(zhuǎn)發(fā)到正確的servlet進(jìn)行處理
  3. FilterChain這個(gè)是servlet規(guī)范中的FilterChain,在請(qǐng)求在交給servlet處理前,會(huì)經(jīng)過一系列的Filter進(jìn)行處理
  4. servlet這個(gè)就不解釋了。

websocket協(xié)議升級(jí)涉及的點(diǎn)

  1. websocket與http有點(diǎn)區(qū)別,websocket是長連接(雖然http也可以配置 keepalive在實(shí)現(xiàn)長連接,但是服務(wù)端并不保證客戶端一直沒有發(fā)請(qǐng)求的情況下仍然保持連接),正常情況下只有雙方其中一端顯式關(guān)閉連接,才能結(jié)束這個(gè)socket。所以SocktProcessor要了解到該socket連接是有升級(jí)過協(xié)議的;不僅如此因?yàn)閣ebsocket是基于http,共用端口,所以SocktProcessor也要感知到socket連接是升級(jí)過協(xié)議,這樣完成握手后的請(qǐng)求,要由websocket的協(xié)議處理器去做協(xié)議解析。
  2. websocket協(xié)議本身并沒有鑒權(quán)等設(shè)計(jì),這個(gè)需要委托給握手階段的http報(bào)文的處理。為此握手階段的報(bào)文要當(dāng)成正常的http協(xié)議處理,需要走所有已配置的Filter;所以握手階段的處理一定會(huì)走到servlet容器里面,而且spring應(yīng)該會(huì)注冊(cè)專門的handler去處理升級(jí)前的http報(bào)文。
  3. servlet處理模型與websocket不一致,所以框架里面應(yīng)該會(huì)有注冊(cè)websocket的handler的邏輯。

到了這里,關(guān)于Spring整合tomcat的WebSocket詳細(xì)邏輯(圖解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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)文章

  • 在 Spring Boot 中整合、使用 WebSocket

    WebSocket 是一種基于 TCP 協(xié)議的全雙工通信協(xié)議,它允許客戶端和服務(wù)器之間建立持久的、雙向的通信連接。相比傳統(tǒng)的 HTTP 請(qǐng)求 - 響應(yīng)模式,WebSocket 提供了實(shí)時(shí)、低延遲的數(shù)據(jù)傳輸能力。通過 WebSocket,客戶端和服務(wù)器可以在任意時(shí)間點(diǎn)互相發(fā)送消息,實(shí)現(xiàn)實(shí)時(shí)更新和即時(shí)通

    2024年04月13日
    瀏覽(17)
  • 【十六】springboot整合WebSocket(超詳細(xì))

    【十六】springboot整合WebSocket(超詳細(xì))

    ?springboot篇章整體欄目:? 【一】springboot整合swagger(超詳細(xì) 【二】springboot整合swagger(自定義)(超詳細(xì)) 【三】springboot整合token(超詳細(xì)) 【四】springboot整合mybatis-plus(超詳細(xì))(上) 【五】springboot整合mybatis-plus(超詳細(xì))(下) 【六】springboot整合自定義全局異常處

    2023年04月09日
    瀏覽(20)
  • Spring Boot整合WebSocket實(shí)現(xiàn)實(shí)時(shí)通信,前端實(shí)時(shí)通信,前后端實(shí)時(shí)通信

    實(shí)時(shí)通信在現(xiàn)代Web應(yīng)用中扮演著越來越重要的角色,無論是在線聊天、股票價(jià)格更新還是實(shí)時(shí)通知,WebSocket都是實(shí)現(xiàn)這些功能的關(guān)鍵技術(shù)之一。Spring Boot作為一個(gè)簡化企業(yè)級(jí)應(yīng)用開發(fā)的框架,其對(duì)WebSocket的支持也非常友好。本文將詳細(xì)介紹如何在Spring Boot中整合WebSocket,實(shí)現(xiàn)一

    2024年04月27日
    瀏覽(51)
  • 實(shí)時(shí)通信應(yīng)用的開發(fā):Vue.js、Spring Boot 和 WebSocket 整合實(shí)踐

    實(shí)時(shí)通信應(yīng)用的開發(fā):Vue.js、Spring Boot 和 WebSocket 整合實(shí)踐

    目錄 1.?什么是webSocket? 2.?webSocket可以用來做什么? 3.?webSocket協(xié)議 4. 服務(wù)器端 5. 客戶端 6. 測試通訊 WebSocket 是一種在單個(gè) TCP連接 上進(jìn)行全雙工通信的協(xié)議。WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允 許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù) 。在WebSocket API中,瀏覽

    2024年02月11日
    瀏覽(26)
  • 【Spring實(shí)戰(zhàn)項(xiàng)目】SpringBoot3整合WebSocket+攔截器實(shí)現(xiàn)登錄驗(yàn)證!從原理到實(shí)戰(zhàn)

    【Spring實(shí)戰(zhàn)項(xiàng)目】SpringBoot3整合WebSocket+攔截器實(shí)現(xiàn)登錄驗(yàn)證!從原理到實(shí)戰(zhàn)

    ???? 歡迎光臨,終于等到你啦 ???? ??我是 蘇澤 ,一位對(duì)技術(shù)充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門到入魔》 ?? 本專欄帶你從Spring入門到入魔 ? 這是蘇澤的個(gè)人主頁可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.

    2024年04月17日
    瀏覽(21)
  • Spring WebSocket實(shí)現(xiàn)實(shí)時(shí)通信的詳細(xì)教程

    Spring WebSocket實(shí)現(xiàn)實(shí)時(shí)通信的詳細(xì)教程

    WebSocket 是基于TCP/IP協(xié)議,獨(dú)立于HTTP協(xié)議的通信協(xié)議。WebSocket 連接允許客戶端和服務(wù)器之間的全雙工通信,以便任何一方都可以通過已建立的連接將數(shù)據(jù)推送到另一方。 我們常用的HTTP是客戶端通過「請(qǐng)求-響應(yīng)」的方式與服務(wù)器建立通信的,必須是客戶端主動(dòng)觸發(fā)的行為,服

    2024年01月23日
    瀏覽(28)
  • Spring Boot 3 + Vue 3 整合 WebSocket (STOMP協(xié)議) 實(shí)現(xiàn)廣播和點(diǎn)對(duì)點(diǎn)實(shí)時(shí)消息

    Spring Boot 3 + Vue 3 整合 WebSocket (STOMP協(xié)議) 實(shí)現(xiàn)廣播和點(diǎn)對(duì)點(diǎn)實(shí)時(shí)消息

    ?? 作者主頁: 有來技術(shù) ?? 開源項(xiàng)目: youlai-mall ?? vue3-element-admin ?? youlai-boot ?? 倉庫主頁: Gitee ?? Github ?? GitCode ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請(qǐng)糾正! WebSocket是一種在Web瀏覽器與Web服務(wù)器之間建立雙向通信的協(xié)議,而Spring Boot提供了便捷的WebSocket支持

    2024年02月02日
    瀏覽(18)
  • Spring Boot進(jìn)階(48):SpringBoot之集成WebSocket及使用說明 | 超級(jí)詳細(xì),建議收藏

    Spring Boot進(jìn)階(48):SpringBoot之集成WebSocket及使用說明 | 超級(jí)詳細(xì),建議收藏

    ????????WebSocket是一種新型的通信協(xié)議,它可以在客戶端與服務(wù)器端之間實(shí)現(xiàn)雙向通信,具有低延遲、高效性等特點(diǎn),適用于實(shí)時(shí)通信場景。在SpringBoot應(yīng)用中,集成WebSocket可以方便地實(shí)現(xiàn)實(shí)時(shí)通信功能,如即時(shí)聊天、實(shí)時(shí)數(shù)據(jù)傳輸?shù)取?????????本文將介紹如何在Sprin

    2024年02月16日
    瀏覽(30)
  • Spring Boot進(jìn)階(49):SpringBoot之集成WebSocket實(shí)現(xiàn)前后端通信 | 超級(jí)詳細(xì),建議收藏

    Spring Boot進(jìn)階(49):SpringBoot之集成WebSocket實(shí)現(xiàn)前后端通信 | 超級(jí)詳細(xì),建議收藏

    ????????在上一期,我對(duì)WebSocket進(jìn)行了基礎(chǔ)及理論知識(shí)普及學(xué)習(xí),WebSocket是一種基于TCP協(xié)議實(shí)現(xiàn)的全雙工通信協(xié)議,使用它可以實(shí)現(xiàn)實(shí)時(shí)通信,不必?fù)?dān)心HTTP協(xié)議的短連接問題。Spring Boot作為一款微服務(wù)框架,也提供了輕量級(jí)的WebSocket集成支持,本文將介紹如何在Spring Boot項(xiàng)

    2024年02月14日
    瀏覽(27)
  • 圖解WebSocket

    圖解WebSocket

    ??作者簡介:大家好,我是愛寫博客的嗯哼,愛好Java的小菜鳥 ??如果感覺博主的文章還不錯(cuò)的話,請(qǐng)??三連支持??一下博主哦 ??個(gè)人博客:敬請(qǐng)期待 相信大家都對(duì)HTTP協(xié)議比較熟悉,因?yàn)樗俏覀兘佑|最多的一個(gè)協(xié)議。但Websocket跟它又有什么關(guān)系,有什么作用呢?這篇文

    2024年02月12日
    瀏覽(14)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包