首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring 5的反应式WebSocket实战

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:

/ 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 类型的变量作为参数,在我们的示例中,我们的Publisher 是Mono ,而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通信。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200106A0BCJU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券