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通信。
领取专属 10元无门槛券
私享最新 技术干货