深入淺出Spring 5,使用Spring 5的反應式WebSocket

2020-12-15 國子學

1.概述

在本文中,我們將使用新的Spring Framework 5 WebSockets API和Spring WebFlux Framework提供的響應功能來創建一個快速示例。

WebSocket是一種眾所周知的協議,它支持客戶端和伺服器之間的全雙工通信,通常用於Web應用程式中,其中客戶端和伺服器需要以高頻率和低延遲交換事件。

Spring Framework 5在框架中具有現代化的WebSockets支持,從而為該通信通道添加了響應功能。

我們可以在Spring WebFlux上找到更多信息。

2. Maven依賴

我們將使用開箱即用的spring-boot-starters依賴項來進行spring-boot-integration和spring-boot-starter-webflux(目前可在Spring Milestone Repository中獲得)。

在此示例中,我們使用的是最新的可用版本2.0.0.M7:

3. Spring中的WebSocket配置

我們的配置非常簡單:我們將注入WebSocketHandler來處理Spring WebSocket應用程式中的套接字會話。

此外,讓我們創建一個HandlerMapping bean注釋的方法,該方法將負責請求和處理程序對象之間的映射:

在這裡,我們可以看到可供使用的URL:ws:// localhost:<port> / event-emitter。

4. Spring中的WebSocket消息處理

我們的ReactiveWebSocketHandler類將負責管理伺服器端的WebSocket會話。

它實現了WebSocketHandler接口,因此我們可以覆蓋handle方法,該方法將用於將消息發送到WebSocket客戶端:

5.創建一個簡單的反應式WebSocket客戶端

現在,讓我們創建一個Spring Reactive WebSocket客戶端,它將能夠與我們的WebSocket伺服器連接並交換信息。

首先,Maven依賴項。

在這裡,我們使用與之前用於設置反應式WebSocket伺服器應用程式相同的spring-boot-starter-webflux。

現在,讓我們創建ReactiveClientWebSocket類,該類負責開始與伺服器的通信:

在上面的代碼中,我們可以看到我們正在使用ReactorNettyWebSocketClient,這是用於Reactor Netty 的WebSocketClient實現。

此外,客戶端通過URL ws:// localhost:8080 / event-emitter與WebSocket伺服器建立連接,並在連接到伺服器後立即建立會話。

我們還可以看到,我們正在與連接請求一起向伺服器發送一條消息(「 event-spring-reactive-client-websocket 」)。

此外,還會調用send方法,並希望使用Publisher <T>類型的變量作為參數,在我們的示例中,我們的Publisher <T>是Mono <T>,而T是簡單的String「 event-me-from-reactive- 「 java-client-websocket 」。

而且,調用了期望類型為String的Flux的thenMany(…)方法。的接收()方法獲得的傳入消息,後來被轉換成字符串的通量。

最後,block()方法強制客戶端在給定時間(在我們的示例中為10秒)之後與伺服器斷開連接。

要運行它,請確保Reactive WebSocket伺服器已啟動並正在運行。然後,啟動ReactiveJavaClientWebSocket類,我們可以在sysout日誌上看到正在發出的事件:

我們還可以從Reactive WebSocket伺服器的日誌中看到客戶端在嘗試連接期間發送的消息:

另外,我們可以在客戶端完成請求後(在我們的情況下,是10秒鐘後)看到終止連接的消息:

6.創建瀏覽器WebSocket客戶端

讓我們創建一個簡單的HTML / Javascript客戶端WebSocket來使用我們的響應式WebSocket伺服器應用程式。

在運行WebSocket伺服器的情況下,在瀏覽器(例如Chrome,Internet Explorer,Mozilla Firefox等)中打開此HTML文件,我們應該看到事件被列印在屏幕上,每個事件的延遲為1秒,如我們的WebSocket伺服器。

7.結論

在這裡,我們提供了一個示例,說明了如何通過使用Spring 5 Framework,實現Spring Webflux提供的新的響應功能來在伺服器和客戶端之間創建WebSocket通信。

相關焦點

  • 反應式微框架 Reactor-Guice 0.12.5, 修復 websocket 連接退出
    Reactor-guice 是一個基於 Google Guice 和 Reactor-netty 的 反應式微服務框架
  • Spring 5功能性Web框架簡介
    簡介Spring WebFlux是使用反應性原理構建的新的功能性Web框架。在本教程中,我們將學習如何在實踐中使用它。我們將以現有的Spring 5 WebFlux指南為基礎。在該指南中,我們使用基於注釋的組件創建了一個簡單的反應式REST應用程式。在這裡,我們將使用功能框架。2.
  • Spring 5解析之WebClient
    概述在本文中,我們將展示WebClient –一個在Spring 5中引入的反應式Web客戶端。我們還將看一下WebTestClient –這是一個旨在用於測試的WebClient。2.依存關係由於我們使用的是Spring Boot應用程式,因此我們需要spring-boot-starter-webflux依賴項以及Reactor項目。
  • 使用Spring 框架的好處
    Spring 框架的主要優點具體如下:1.方便解耦,便於開發,spring支持aop編程,Spring就是一個大工廠,可以將所有對象的創建和依賴關係維護都交給spring管理,Spring 不會讓你白費力氣做重複工作,它真正的利用了一些現有的技術,像ORM 框架、日誌框架、JEE、Quartz 和 JDK 計時器,其他視圖技術。
  • spring框架之註解的使用
    如果是註解+XML組合使用,可以只開啟①。2註解的使用①@Component註解相當於將對象存放到spring容器中。②@Autowired註解將ProductDao注入到了ProductService單獨使用@Autowired ,表示按照類型注入,會到spring容器中查找ProductDao的類型,對應<bean class=」」>中class的屬性值。
  • 面試官:你了解spring嗎?spring的兩大核心是什麼?
    創建一個java項目spring並不是非要在javaweb環境下才可以使用,一個普通的java程序中也可以使用Spring。b. 導入Spring的libs目錄下IOC相關的jar包c.通過靜態工廠創建對象很多的時候,我們面對的類是無法通過無參構造去創建的,例如該類沒有無參構造、是一抽象類 等等情況 ,此時無法要求spring通過無參構造創建對象,此時可以使用靜態工廠 方式創建對象。
  • Spring Boot與Shiro整合實現用戶認證
    ;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration
  • Java經典面試題Spring是什麼 Spring框架入門詳解
    我們在main方法外部隨意創建一個public的方法,在上部使用@Test註解即可運行,這樣能夠幫我們節省在main方法內通過對象調用方法的時間。以上的就是Spring被外行廣為流傳的,傳說中的IOC的使用,什麼是IOC中文意思就是控制反轉,什麼意思?
  • 面試刷題:Spring Bean的生命周期?
    spring是Java軟體開發的事實標準。今天的問題是:springBean的生命周期是怎樣的?3、注入Aware的依賴(BeanNameAware,BeanFactoryAware,ApplicationContextAware);4、執行通用的方法前置處理,方法: BeanPostProcessor.postProcessorBeforeInitialization()5、
  • 探索Spring 5 WebFlux URL匹配
    概述Spring 5帶來 了一個新的 PathPatternParser,用於解析URI模板模式。這是以前使用的AntPathMatcher的替代方法。該AntPathMatcher是Ant風格的路徑模式匹配的實現。
  • 從零搭建 Spring Cloud 服務(超詳細)
    2.1 引入Spring Boot相關依賴 這裡的springboot用的是1.5.7版本引入Spring Cloud相關依賴 這裡為Edgware.SR52.1 工程初始化配置在Idea中創建工程--指定下載源和使用springcloud的版本--> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud
  • 學渣,你真的知道spring的意思嗎?
    今天以春天spring這個單詞為例,讓你了解一點英語的演變規則。Spring作為春天的意思,我們小學的時候就有學過,這不足為奇。下面我們由作為春天的意思去推理出spring其他的意思。1.Spring泉水、小溪我們知道,春天到了,雨水會增多,那麼山上的樹木、土壤就會變的溼潤,越積越多,最後從山腳下滲出來,滲出來的水就叫泉水,所以,spring衍生出泉水的意思。泉水匯聚到溝渠裡,慢慢的形成了小溪,所以,spring衍生出小溪的意思。
  • Spring集成RabbitMQ簡單實現RPC
    /schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org
  • Spring Boot Admin快速打造監控平臺
    Spring Boot Admin快速打造監控平臺 使用過Spring boot的開發者都知道actuator,它是Springboot提供的用來對應用系統進行自省和監控的功能模塊,藉助於Actuator開發者可以很方便地對應用系統某些監控指標進行查看、統計等。
  • 如何用Spring WebFlux構建Reactive REST API
    其流程圖如下所示:由於Reactor的實施往往涉及到Spring 5.x,因此,我們可以使用帶有Spring servlet棧的命令式編程,來構建REST API。下圖展示了Spring如何支持響應式和servlet棧的實現。下面是一個公布了響應式REST API的應用。
  • Spring面試題:SpringBoot開發自定義starter
    Spring boot的AutoConfiguration機制標記一個應用為Springboot應用,需要一個SpringBootApplication註解,下面是一個標準的spring boot啟動程序。
  • Spring Boot 啟動事件和監聽器,太強大了!
    一般來說,我們很少會使用到應用程式事件,但我們也不要忘了它們的存在,比如說在 Spring 框架內部都使用了各種不同的事件來處理不同的任務。5、ApplicationStartedEvent這個事件是在 Spring 上下文(context)刷新之後,且在 application/ command-line runners 被調用之前發送。
  • Spring常用註解——JAVA成長之路
    作用:調用無參構造創建一個bean對象,並把對象存入spring的IOC容器,交由spring容器進行管理。相當於在xml中配置一個bean。屬性:value:指定bean的id。1.5 作用:用於把當前方法的返回值作為bean對象存入spring的ioc容器中屬性:name:用於指定bean的id。
  • 春暖花開時,春天的英文表達不能只知道spring
    除了表達春天,spring 還可以用來表達"泉;泉水 "。如hot spring溫泉。與春天相關的英文詞彙一說到春天,除了spring這一英文表達,還會想到很多詞彙,如萬物復甦、溫暖、花兒盛開、微風徐徐、綠色、希望等。
  • springcloud五大組件
    首先我們來看springcloud是什麼?它是微服務架構集大成者,基於springboot構建,可以將一系列優秀組件進行完美整合。對熟悉的程式設計師來說,上手不麻煩,對新手來說,就需要了解springcloud架構再去學習。