日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

SpringBoot整合WebSocket詳解

來源: 責編: 時間:2023-08-09 23:02:31 466觀看
導讀環境:Springboot3.0.5WebSocket介紹WebSocket協議RFC 6455提供了一種標準化的方式,通過一個TCP連接在客戶端和服務器之間建立全雙工、雙向的通信通道。它是一個不同于HTTP的TCP協議,但設計為在HTTP之上工作,使用80和443端

環境:Springboot3.0.5JtH28資訊網——每日最新資訊28at.com

WebSocket介紹

WebSocket協議RFC 6455提供了一種標準化的方式,通過一個TCP連接在客戶端和服務器之間建立全雙工、雙向的通信通道。它是一個不同于HTTP的TCP協議,但設計為在HTTP之上工作,使用80和443端口,并允許重用現有的防火墻規則。JtH28資訊網——每日最新資訊28at.com

WebSocket交互開始于一個HTTP請求,使用HTTP Upgrade header進行升級,在本例中是切換到WebSocket協議。下面的例子展示了這種交互:JtH28資訊網——每日最新資訊28at.com

GET /spring-websocket-portfolio/portfolio HTTP/1.1Host: localhost:8080Upgrade: websocket             // ①Connection: Upgrade           // ②Sec-WebSocket-Key: Uc9l9TMkWGbHFD2qnFHltg==Sec-WebSocket-Protocol: v10.stomp, v11.stompSec-WebSocket-Version: 13Origin: http://localhost:8080

①:Upgrade header頭部信息JtH28資訊網——每日最新資訊28at.com

②:使用 Upgrade 連接JtH28資訊網——每日最新資訊28at.com

支持WebSocket的服務器會返回類似下面的輸出,而不是通常的200狀態碼:JtH28資訊網——每日最新資訊28at.com

HTTP/1.1 101 Switching Protocols Upgrade: websocketConnection: UpgradeSec-WebSocket-Accept: 1qVdfYHU9hPOl4JYYNXF623Gzn0=Sec-WebSocket-Protocol: v10.stomp

握手成功后,HTTP upgrade請求的TCP套接字保持打開,客戶端和服務器可以繼續發送和接收消息。JtH28資訊網——每日最新資訊28at.com

如果WebSocket服務器運行在web服務器(例如nginx)后面,你可能需要配置它來將WebSocket升級請求傳遞給WebSocket服務器。同樣,如果應用程序運行在云環境中,請查看云提供商提供的有關WebSocket支持的說明。JtH28資訊網——每日最新資訊28at.com

HTTP與WebSocket

盡管WebSocket在設計上是與HTTP兼容的,而且從HTTP請求開始,但重要的是要明白,這兩種協議導致了非常不同的架構和應用程序編程模型。JtH28資訊網——每日最新資訊28at.com

在HTTP和REST中,應用程序被建模為多個url。為了與應用程序交互,客戶端以請求-響應的方式訪問這些url。服務器根據HTTP URL、方法和首部將請求路由到適當的處理程序。JtH28資訊網——每日最新資訊28at.com

相比之下,在websocket中,初始連接通常只有一個URL。隨后,所有應用程序消息都在同一個TCP連接上流動。這是一種完全不同的異步、事件驅動的消息傳遞架構。JtH28資訊網——每日最新資訊28at.com

WebSocket也是一種底層傳輸協議,與HTTP不同,它對消息內容沒有任何語義規定。這意味著除非客戶端和服務器在消息語義上達成一致,否則無法路由或處理消息。JtH28資訊網——每日最新資訊28at.com

WebSocket客戶端和服務器可以通過HTTP握手請求的Sec-WebSocket-Protocol頭部來協商使用更高級別的消息傳遞協議(例如STOMP)。在這種情況下,他們需要制定自己的慣例。JtH28資訊網——每日最新資訊28at.com

什么時候該使用WebSocket

WebSockets可以使網頁具有動態性和交互性。然而,在許多情況下,Ajax和HTTP流或長輪詢的組合可以提供簡單而有效的解決方案。JtH28資訊網——每日最新資訊28at.com

例如,新聞、郵件和社交源需要動態更新,但每隔幾分鐘更新一次完全沒問題。另一方面,協作、游戲和金融應用需要更接近實時。JtH28資訊網——每日最新資訊28at.com

延遲本身并不是決定性因素。如果消息量相對較少(例如監視網絡故障),HTTP流或輪詢可以提供有效的解決方案。低延遲、高頻率和高容量的組合才是WebSocket的最佳選擇。JtH28資訊網——每日最新資訊28at.com

還要記住,在互聯網上,你無法控制的限制性代理可能會阻止WebSocket交互,要么是因為它們沒有配置為傳遞Upgrade header,要么是因為它們關閉了看起來空閑的長連接。這意味著對防火墻內的內部應用程序使用WebSocket比面向公眾的應用程序更直接。JtH28資訊網——每日最新資訊28at.com

WebSocket核心API

Spring框架提供了一個WebSocket API,可以用它來編寫處理WebSocket消息的客戶端和服務器端應用程序。JtH28資訊網——每日最新資訊28at.com

  • WebSocketHandler

創建WebSocket服務器很簡單,只需實現WebSocketHandler,或者擴展TextWebSocketHandler或BinaryWebSocketHandler。下面的例子使用了TextWebSocketHandler:JtH28資訊網——每日最新資訊28at.com

public class MessageHandler extends TextWebSocketHandler {  @Override  public void handleTextMessage(WebSocketSession session, TextMessage message) {    System.out.printf("SessionId: %s, 接收到消息: %s%n", session.getId(), message.getPayload()) ;    try {      session.sendMessage(new TextMessage("服務端接收到消息 - " + message.getPayload())) ;    } catch (IOException e) {      e.printStackTrace();    }  }  @Override  public void afterConnectionEstablished(WebSocketSession session) throws Exception {    System.out.printf("連接成功, 會話Id: %s, Attribute: %s%n", session.getId(), session.getAttributes()) ;  }  @Override  public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {    System.out.printf("連接關閉, 會話Id: %s, 關閉狀態: %s%n", session.getId(), status.getCode() + " - " + status.getReason()) ;  }}

WebSocket配置JtH28資訊網——每日最新資訊28at.com

@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {  @Override  public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {    registry.addHandler(messageHandler(), "/message")  }  @Bean  public WebSocketHandler messageHandler() {    return new MessageHandler();  }}
  • WebSocket Handshake

要定制初始的HTTP WebSocket握手請求,最簡單的方法是使用HandshakeInterceptor,它提供了握手前和握手后的方法。你可以使用這樣的攔截器來阻止握手,或者讓 WebSocketSession可以訪問任何屬性。下面的例子使用內置的攔截器將HTTP會話屬性傳遞給WebSocket會話:JtH28資訊網——每日最新資訊28at.com

@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {  @Override  public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {    registry      .addHandler(messageHandler(), "/message")      .setHandshakeHandler(handshakeHandler())      // 添加捂手攔截器      .addInterceptors(new HandshakeInterceptor() {        // 如果該方法返回false,則不允許建立連接        @Override        public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,            WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {          // todo          attributes.put("uid", uid) ;          return true ;        }        @Override        public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,            Exception exception) {          // todo        }      }) ;  }}
  • 部署

Spring WebSocket API很容易集成到Spring MVC應用程序中,DispatcherServlet可以同時處理HTTP WebSocket握手和其他HTTP請求。調用
WebSocketHttpRequestHandler也很容易集成到其他HTTP處理場景中。這樣既方便又容易理解。但是,對于JSR-356運行時,需要特別注意。JtH28資訊網——每日最新資訊28at.com

Java WebSocket API (JSR-356)提供兩種部署機制。第一種方法涉及啟動時的Servlet容器類路徑掃描(Servlet 3特性)@ServerEndpoint。另一個是Servlet容器初始化時使用的注冊 API(ServletContainerInitializer)。這兩種機制都不可能對所有HTTP處理使用單個“前端控制器”?—?包括WebSocket握手和所有其他HTTP請求?—?如Spring MVC的DispatcherServlet。JtH28資訊網——每日最新資訊28at.com

這是JSR-356的一個重要限制,Spring的WebSocket支持通過特定于服務器的RequestUpgradeStrategy實現來解決這個問題,即使運行在JSR-356運行時也是如此。Tomcat、Jetty、GlassFish、WebLogic、WebSphere和Undertow(以及WildFly)目前都存在這樣的策略。JtH28資訊網——每日最新資訊28at.com

  • 服務配置

每個底層WebSocket引擎都公開了控制運行時特征的配置屬性,例如消息緩沖區大小、空閑超時等。JtH28資訊網——每日最新資訊28at.com

對于Tomcat、WildFly和GlassFish,可以在WebSocket Java配置中添加
ServletServerContainerFactoryBean,如下面的例子所示:JtH28資訊網——每日最新資訊28at.com

@Beanpublic ServletServerContainerFactoryBean servletServerContainerFactoryBean() {  ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean() ;  container.setMaxTextMessageBufferSize(8192) ;  container.setMaxBinaryMessageBufferSize(8192) ;  return container ;}


JtH28資訊網——每日最新資訊28at.com

  • 允許的來源

從Spring Framework 4.1.5開始,WebSocket和SockJS的默認行為是只接受同源請求。也可以允許所有或指定的來源列表。這個檢查主要是為瀏覽器客戶端設計的。沒有什么能阻止其他類型的客戶端修改Origin首部值。JtH28資訊網——每日最新資訊28at.com

三種可能的行為是:JtH28資訊網——每日最新資訊28at.com

  1. 僅允許同源請求(默認):在這種模式下,當啟用SockJS時,Iframe HTTP響應頭X-Frame-Options設置為SAMEORIGIN,并且禁用JSONP傳輸,因為它不允許檢查請求的來源。因此,啟用此模式時,不支持IE6和IE7。
  2. 允許指定的來源列表:每個允許的來源必須以http://或https://.開頭在此模式下,當啟用SockJS時,禁用IFrame傳輸。因此,啟用此模式時,將不支持IE6到IE9。
  3. 允許所有來源:要啟用此模式,你應該提供*作為允許的來源值。在該模式下,所有傳輸通道都可用。
@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {  @Override  public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {    registry      .addHandler(messageHandler(), "/message")      .setAllowedOriginPatterns("*") ;  }}

測試

通過上面的介紹和配置,WebSocket環境就算是簡單的配置完成了,接下來通過Postman進行測試。JtH28資訊網——每日最新資訊28at.com

圖片圖片JtH28資訊網——每日最新資訊28at.com

連接成功JtH28資訊網——每日最新資訊28at.com

發送消息及接收消息發送消息及接收消息JtH28資訊網——每日最新資訊28at.com


JtH28資訊網——每日最新資訊28at.com

服務端接收到消息服務端接收到消息JtH28資訊網——每日最新資訊28at.com


JtH28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-5136-0.htmlSpringBoot整合WebSocket詳解

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 這款輕量級規則引擎,真香!

下一篇: 大模型速度狂飆2.39倍!清華聯手微軟首提SoT,讓LLM思考更像人類

標簽:
  • 熱門焦點
  • 5月iOS設備性能榜:M1 M2依舊是榜單前五

    和上個月一樣,沒有新品發布的iOS設備性能榜的上榜設備并沒有什么更替,僅僅只有跑分變化而產生的排名變動,剛剛開始的蘋果WWDC2023,推出的產品也依舊是新款Mac Pro、新款Mac Stu
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個大新聞是Meta AI推出了新的開源授權的大型語言模型Llama 2。這是一項非常重要的進展:Llama 2可免費用于研究和商業用途。(幾小時前,swyy發現它已從LLaMA 2更名為Lla
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 攜眾多高端產品亮相ChinaJoy,小米帶來一場科技與人文的視聽盛宴

    7月28日,全球數字娛樂領域最具知名度與影響力的年度盛會中國國際數碼互動娛樂展覽會(簡稱ChinaJoy)在上海新國際博覽中心盛大開幕。作為全球領先的科
  • 機構稱Q2國內智能手機銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據市場調查機構Counterpoint Research公布的最新報告,2023年第2季度中國智能手機銷量同比下降4%,創新自2014年以來第2季度銷量新低。報
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲欧美日韩直播| 99在线精品免费视频九九视| 国产伦精品一区二区三区免费迷 | 激情av一区二区| 亚洲第一视频网站| 一区二区三区免费网站| 欧美一区二区视频免费观看| 久久久久九九九九| 欧美日韩精品综合| 韩日成人在线| 99国产精品国产精品久久| 午夜综合激情| 你懂的成人av| 国产精品美女久久久久av超清| 激情欧美日韩一区| 一区二区三区欧美亚洲| 久久精品理论片| 欧美日韩精品是欧美日韩精品| 国产日韩精品一区二区浪潮av| 亚洲黄网站在线观看| 亚洲欧美日韩一区二区| 免费欧美电影| 国产麻豆综合| 亚洲开发第一视频在线播放| 欧美一区二区三区在线观看| 欧美精品日本| 国产亚洲欧美色| 日韩视频一区二区在线观看| 久久成人人人人精品欧| 欧美精品一区二区三区高清aⅴ| 国产伦精品一区二区三区照片91| 亚洲国产精品久久久久久女王| 亚洲欧美日韩国产成人| 欧美成人精品在线播放| 国产欧美1区2区3区| 亚洲破处大片| 久久久久国产一区二区三区| 欧美午夜精品久久久久久久| 在线观看一区二区视频| 性8sex亚洲区入口| 欧美日韩三区| 亚洲青涩在线| 久久一区中文字幕| 国产欧美在线| 亚洲欧美日韩区| 欧美日韩成人精品| 亚洲国产精品123| 久久精品国产清高在天天线| 欧美午夜片欧美片在线观看| 亚洲激情啪啪| 久久躁狠狠躁夜夜爽| 国产女优一区| 亚洲免费影视| 欧美无乱码久久久免费午夜一区 | 亚洲国产黄色| 久久久国产一区二区| 亚洲一区二区三区高清不卡| 美女999久久久精品视频| 国产午夜精品麻豆| 亚洲欧美日本国产专区一区| 欧美日韩国产亚洲一区| 亚洲国产精品99久久久久久久久| 欧美在线视频观看| 国产欧美在线观看| 午夜精品福利电影| 国产精品国产精品国产专区不蜜| 亚洲免费成人av| 欧美1区3d| 亚洲高清自拍| 男女视频一区二区| 亚洲国产精品www| 美女精品视频一区| 在线精品亚洲| 美女视频黄 久久| 亚洲第一偷拍| 免费欧美高清视频| 91久久一区二区| 欧美激情一区在线| 亚洲免费激情| 欧美日韩一区二区三区在线看 | 免费高清在线视频一区·| 国产一区二区三区在线观看免费| 欧美在线地址| 国产综合自拍| 久久婷婷久久一区二区三区| 麻豆精品视频在线观看视频| 亚洲黄色av| 久久精品网址| 国产日韩欧美成人| 亚洲欧洲av一区二区| 国产精品久久毛片a| 亚洲一级黄色av| 国产精品久久久久久妇女6080 | 在线电影国产精品| 免费观看30秒视频久久| 91久久精品视频| 欧美噜噜久久久xxx| 一个色综合av| 国产精品久久亚洲7777| 欧美一区在线看| 一区久久精品| 欧美精品一区二区精品网| 一区二区久久久久| 国产精品永久免费观看| 久久精品国产99精品国产亚洲性色| 国产亚洲综合在线| 欧美伊人久久| 激情五月综合色婷婷一区二区| 猫咪成人在线观看| 日韩视频一区二区三区| 国产精品乱码一区二区三区| 欧美伊人影院| 精品成人一区二区三区| 欧美精品免费看| 亚洲欧美在线一区二区| 黄网站色欧美视频| 欧美人妖另类| 香蕉久久a毛片| 在线成人激情黄色| 欧美日韩裸体免费视频| 欧美一区二区三区的| 在线免费观看一区二区三区| 欧美日韩国产精品成人| 午夜老司机精品| 亚洲高清在线| 国产精品久久久久9999高清| 久久免费视频网站| 一本一本a久久| 韩国精品一区二区三区| 欧美美女视频| 久久精品二区亚洲w码| 亚洲乱码国产乱码精品精| 国产精品实拍| 欧美大香线蕉线伊人久久国产精品| 亚洲小视频在线观看| 韩曰欧美视频免费观看| 欧美日韩小视频| 久热国产精品| 亚洲免费在线视频| 亚洲国产精品视频一区| 国产精品女人久久久久久| 免费看的黄色欧美网站| 亚洲欧美日韩国产中文| 久久久五月婷婷| 一个色综合导航| 一区二区三区在线观看视频| 欧美涩涩视频| 欧美va亚洲va香蕉在线| 欧美一级专区免费大片| 亚洲美女精品成人在线视频| 国产一区二区三区免费观看| 欧美日韩一区二区在线视频| 久久视频免费观看| 午夜精品久久久久久久久久久久久| 亚洲欧洲另类国产综合| 国产一二精品视频| 国产精品久久久久7777婷婷| 欧美大尺度在线观看| 久久av红桃一区二区小说| 一区二区日韩欧美| 亚洲电影第三页| 国产亚洲免费的视频看| 国产精品xvideos88| 欧美国产高清| 久久亚洲精品中文字幕冲田杏梨| 亚洲宅男天堂在线观看无病毒| 亚洲欧洲另类国产综合| 国模精品一区二区三区| 国产精品网站在线观看| 欧美视频精品一区| 欧美激情一区二区| 麻豆国产精品va在线观看不卡| 欧美一区二区在线| 亚洲在线免费视频| 一区二区三区日韩欧美| 亚洲精选在线观看| 亚洲激情在线观看| 欲色影视综合吧| 国户精品久久久久久久久久久不卡| 国产精品美女久久久浪潮软件| 欧美日韩免费观看一区=区三区| 麻豆国产va免费精品高清在线| 久久久精品一区| 欧美自拍丝袜亚洲| 亚洲欧美日韩中文视频| 亚洲制服欧美中文字幕中文字幕| 亚洲视频网站在线观看| 99在线|亚洲一区二区| 亚洲免费播放| 99www免费人成精品| 亚洲精品在线观| 亚洲日本中文字幕| 亚洲精品乱码久久久久久黑人| 亚洲国产乱码最新视频| 亚洲第一福利社区| 亚洲电影自拍| 亚洲国产精品久久久久秋霞蜜臀 | 国产精品永久免费| 国产日本精品| 国产一区二区av| 国产又爽又黄的激情精品视频| 国产日韩欧美中文| 国产日韩综合| 国内精品久久久久久|