1.概述

在本文中,我们将使用新的Spring 5 WebSocketS API创建一个快速示例以及Spring WebFlux提供的无功功能。

WebSocket是一种众所周知的协议,它能够在客户端和服务器之间的全双工通信,通常用于客户端和服务器需要在高频和低延迟处交换事件的Web应用程序中。

Spring Framework 5具有现代化的WebSockets在框架中支持,向此通信通道添加无功功能。

我们可以在Spring WebFlux上找到更多在这里

2. Maven依赖项

我们将使用spring- booters依赖春天启动集成Spring-Boot-Starter-WebFlux,现载于春季里程碑存储库

在这个例子中,我们使用的是最新的可用版本,2.0.0。M7,但您应该始终获得Maven存储库中可用的最新版本:

<依赖>  org.springframework.boot   Spring-Boot-Starter-Integration   <依赖项>  org.springFrameWork.Boot   Spring-Boot-Starter-WebFlux  

3.春季的WebSocket配置

我们的配置非常简单:我们将注射WebSocketHandler来处理Spring WebSocket应用程序中的套接字会话。

@Autowired私有WebSocketHandler WebSocketHandler;

此外,让我们创造一个手持术Bean注释方法将负责请求和处理程序对象之间的映射:

@Bean public HandlerMapping webSocketHandlerMapping() {Map Map = new HashMap<>();地图。put(" /事件发射器”,webSocketHandler);SimpleUrlHandlerMapping handlerMapping = new SimpleUrlHandlerMapping();handlerMapping.setOrder (1);handlerMapping.setUrlMap(地图);返回handlerMapping;}

我们可以连接的URL是:ws: / / localhost: <口> /事件发射器。

4. WebSocket消息在春季处理

我们的反应威斯科克·托勒类将负责管理服务器端的WebSocket会话。

它实现了这一点WebSocketHandler接口,这样我们就可以覆盖处理方法,将用于将消息发送到WebSocket客户端:

@component公共类ReveltiveWebSockethandler实现WebSockethandler {//私有字段... @Override Public Mono 句柄(WebSocketsession WebSocketsession.send(winthalflux .map(websocketsession :: textmessage))。(websocketsession.receive().map(websocketmessage :: getPayloadAstext).log());}}

5.创建一个简单的反垃圾邮件客户端

现在让我们创建一个弹簧反应性的WebSocket客户端,该客户端将能够使用我们的WebSocket服务器连接和交换信息。

5.1。maven依赖

首先,maven依赖项。

<依赖> < groupId > org.springframework。启动< / groupId > < artifactId > spring-boot-starter-webflux < / artifactId > < / >的依赖

在这里,我们使用先前使用的相同的Spring-Boot-Starter-WebFlux来设置我们的反应WebSocket服务器应用程序。

5.2。WebSocket客户

现在,让我们创建ReactiveClientWebSocket类,负责启动与服务器的通信:

公共类ReftiveJavaclientWebSocket {公共静态void main(String [] args)抛出InterruptedException {WebSocketClient Client = New ReastORNETTYWEBSOcket();client.execute(Uri.Create(“WS:// localhost:8080 / Event-emitter”),会话 - > session.send(mono.just(session.textmessage(“event-spring-actice-client-websocket”))).thenmany(session.receive().map(websocketmessage :: getpayloadastext).log()).hen()).block(持续时间.ofseconds(10l));}}

在上面的代码中,我们可以看到我们正在使用ReactorNettyWebSocketClient, 哪一个是WebSocketClient实施与反应堆网关一起使用。

此外,客户端通过URL连接到WebSocket服务器WS:// localhost:8080 / event-emitter,一旦连接到服务器,就会建立会话。

我们也可以看到我们向服务器发送消息(“event-spring-reactive-client-websocket“)以及连接请求。

此外,该方法发送被调用,期望作为参数的是类型变量出版商在我们的例子中是我们的出版商单声道T.是一个简单的字符串”Event-Me-from-extive-java-client-websocket”。

此外,当时(...)期待A.助势类型细绳被调用。的收到()方法获取传入消息的通量,后来被转换为字符串。

最后,块()方法强制客户机在给定的时间(在我们的示例中是10秒)之后断开与服务器的连接。

5.3。开始客户端

要运行它,请确保响应式WebSocket服务器已经启动并运行。然后,启动ReactiveJavaClientWebSocket班级,我们可以看到sysout.记录正在发出的事件:

[reactor-http-nio-4]信息reactor.Flux.Map。1- onNext({"eventId":"6042b94f-fd02-47a1-911d-dacf97f12ba6", "eventDt":"2018-01-11T23:29:26.900"})

我们还可以在Veactive Websocket服务器中看到客户端在连接尝试期间由客户端发送的消息:

[Reactor-http-nio-2] reactor.flux.map.1:onnext(事件 -  me-from-active-java-client)

此外,我们可以在客户端完成其请求后看到终止连接的消息(在我们的情况下,在10秒之后):

reactor-http-nio-2 reactor.Flux.Map。1: onComplete ()

6.创建浏览器WebSocket客户端

让我们创建一个简单的HTML/Javascript客户端WebSocket来使用我们的响应式WebSocket服务器应用程序。

With the WebSocket server running, opening this HTML file in a browser (e.g.: Chrome, Internet Explorer, Mozilla Firefox etc.), we should see the events being printed on the screen, with a delay of 1 second per event, as defined in our WebSocket server.

{“eventId”:“c25975de - 6775 - 4 - b0b b974 b396847878e6”、“eventDt”:“2018 - 01 - 11 t23:56:09.780”}{“eventId”:“ac74170b - 1 - f71 - 49 - d3 - 8737 - b3f9a8a352f9”、“eventDt”:“2018 - 01 - 11 t23:56:09.781”}{“eventId”:“40 d8f305 - f252 - 4 - c14 - 86 d7 - ed134d3e10c6”、“eventDt”:“2018 - 01 - 11 t23:56:09.782”}

7.结论

在这里,我们介绍了如何通过使用Spring 5框架在服务器和客户端之间创建WebSocket通信的示例,实现Spring WebFlux提供的新型无功功能。

一如既往,可以在我们的中找到完整的例子GitHub库

通用底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>看看这个课程
2评论
最古老的
最新的
内联反馈
查看所有评论
对这篇文章的评论关闭!