大家好,欢迎来到IT知识分享网。
背景
在读最新的spring5文档,会发现websocket分布在两个不同的模块:
Web Servlet模块
web Reactive模块
同一个东西为什么在两个模块都有呢?
最初怀疑是不是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