spring servlet websocket和spring webflux-websocket的不同

spring servlet websocket和spring webflux-websocket的不同WebServlet模块的 WebSocket ClientWebSocketClient client =new WebSocketClien

大家好,欢迎来到IT知识分享网。

背景

在读最新的spring5文档,会发现websocket分布在两个不同的模块:

Web Servlet模块

web Reactive模块

spring servlet websocket和spring webflux-websocket的不同

同一个东西为什么在两个模块都有呢?

最初怀疑是不是spring的bug,于是就针对两个不同模块的websocket进行研读,发现也不是很清晰,那么怎么弄懂他们的区别呢?

分析

因websocket是cs结构,那么我们分别从client和server端来分析,就容易看出他们的差异了。

  • Web Servlet模块的 WebSocket Client
WebSocketClient client =new WebSocketClient();      
  • Web Reactive模块的websocket client
       WebSocketClient client = new ReactorNettyWebSocketClient();
  • Web Servlet模块的 WebSocket Server
import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.TextMessage; public class MyHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession session, TextMessage message) { // ... } }
  • Web Reactive模块的websocket server
class ExampleHandler implements WebSocketHandler { @Override public Mono<Void> handle(WebSocketSession session) { Flux<WebSocketMessage> output = session.receive() .doOnNext(message -> { // ... }) .concatMap(message -> { // ... }) .map(value -> session.textMessage("Echo " + value)); return session.send(output); } }

从上面可以看到,

Web Servlet模块的 WebSocket的client使用的是普通的WebSocketClient,

而Web Reactive模块的websocket的client利用了ReactorNettyWebSocketClient的Reactive特性。

Web Servlet模块的 WebSocket的server使用的是普通的WebSocketHandler,

而Web Reactive模块的websocket的server利用了Flux的Reactive特性。

总结

Web Servlet模块的 WebSocket的client和server使用的是阻塞式的。

Web Reactive模块的websocket的client和server使用的是非阻塞式的。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/50856.html

(0)
上一篇 2024-08-22 17:26
下一篇 2024-08-24 22:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信