如何实现SpringBoot集成WebSocket的两种技术方案?

2026-04-19 18:083阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计759个文字,预计阅读时间需要4分钟。

如何实现SpringBoot集成WebSocket的两种技术方案?

WebSocket与常规HTTP协议的区别和优缺点概述:

一、WebSocket与HTTP的区别

1.应用层协议:WebSocket是一种应用层协议,而HTTP协议也是应用层协议。

2.连接方式:WebSocket使用全双工通信,建立持久连接,而HTTP是半双工通信,需要建立三次握手连接。

3.数据传输:WebSocket支持文本、二进制数据等多种格式,而HTTP主要传输文本数据。

二、WebSocket的优缺点

优点:

1.持久连接:WebSocket建立后,客户端和服务器之间可以持续通信,无需每次传输数据都建立连接。

2.低延迟:WebSocket连接建立后,通信延迟较低,适用于实时应用。

3.传输效率:WebSocket传输效率高,减少了HTTP协议中的头部信息,降低了数据传输量。

缺点:

1.安全性:WebSocket连接容易受到攻击,如XSS攻击等。

如何实现SpringBoot集成WebSocket的两种技术方案?

2.兼容性:部分老旧浏览器不支持WebSocket协议。

3.难以实现负载均衡:由于WebSocket连接的持久性,难以在多个服务器之间进行负载均衡。

WebSocket跟常规的localhost:8885/websocket/2"); //socket = new WebSocket("${basePath}websocket/${cid}".replace("www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Spring Boot+WebSocket+广播式</title> </head> <body onload="disconnect()"> <noscript><h2 style="color: #ff0000">貌似你的浏览器不支持websocket</h2></noscript> <div> <div> <button id="connect" onclick="connect();">连接</button> <button id="disconnect" disabled="disabled" onclick="disconnect();">断开连接</button> </div> <div id="conversationDiv"> <label>输入你的名字</label><input type="text" id="name" /> <button id="sendName" onclick="sendName();">发送</button> <p id="response"></p> </div> </div> <script th:src="@{/js/sockjs.min.js}"></script> <script th:src="@{/js/stomp.min.js}"></script> <script th:src="@{/js/jquery-3.2.1.min.js}"></script> <script type="text/javascript"> var stompClient = null; function setConnected(connected) { document.getElementById('connect').disabled = connected; document.getElementById('disconnect').disabled = !connected; document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden'; $('#response').html(); } function connect() { var socket = new SockJS('/socket'); //1 stompClient = Stomp.over(socket);//2 stompClient.connect({}, function(frame) {//3 setConnected(true); console.log('开始进行连接Connected: ' + frame); stompClient.subscribe('/topic/notice', function(respnose){ //4 showResponse(JSON.parse(respnose.body).responseMessage); }); }); } function disconnect() { if (stompClient != null) { stompClient.disconnect(); } setConnected(false); console.log("Disconnected"); } function sendName() { var name = $('#name').val(); stompClient.send("/app/change-notice", {}, JSON.stringify({ 'name': name }));//5 } function showResponse(message) { var response = $("#response"); response.html(message); } </script> </body> </html>

2.4:对应的js引用可以去网上下载

2.5:浏览器debug访问localhost:8885/system/socket2,点击连接连接到服务器,数据内容可以推送到服务器以及服务器消息回推。

2.6:实现前端和服务端的轮训可以页面Ajax轮训也可以后端添加定时器

@Component @EnableScheduling public class TimeTask { private static Logger logger = LoggerFactory.getLogger(TimeTask.class); @Scheduled(cron = "0/20 * * * * ?") public void test(){ System.err.println("********* 定时任务执行 **************"); CopyOnWriteArraySet<WebSocketServer> webSocketSet = WebSocketServer.getWebSocketSet(); int i = 0 ; webSocketSet.forEach(c->{ try { c.sendMessage(" 定时发送 " + new Date().toLocaleString()); } catch (IOException e) { e.printStackTrace(); } }); System.err.println("/n 定时任务完成......."); } }

代码在github.com/huiyunfei/spring-cloud.git的admin项目里

基于STOMP协议的广播模式和点对点模式消息推送可参考:

www.cnblogs.com/hhhshct/p/8849449.html

www.cnblogs.com/jmcui/p/8999998.html

到此这篇关于springboot集成websocket的两种实现方式的文章就介绍到这了,更多相关springboot集成websocket内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

标签:

本文共计759个文字,预计阅读时间需要4分钟。

如何实现SpringBoot集成WebSocket的两种技术方案?

WebSocket与常规HTTP协议的区别和优缺点概述:

一、WebSocket与HTTP的区别

1.应用层协议:WebSocket是一种应用层协议,而HTTP协议也是应用层协议。

2.连接方式:WebSocket使用全双工通信,建立持久连接,而HTTP是半双工通信,需要建立三次握手连接。

3.数据传输:WebSocket支持文本、二进制数据等多种格式,而HTTP主要传输文本数据。

二、WebSocket的优缺点

优点:

1.持久连接:WebSocket建立后,客户端和服务器之间可以持续通信,无需每次传输数据都建立连接。

2.低延迟:WebSocket连接建立后,通信延迟较低,适用于实时应用。

3.传输效率:WebSocket传输效率高,减少了HTTP协议中的头部信息,降低了数据传输量。

缺点:

1.安全性:WebSocket连接容易受到攻击,如XSS攻击等。

如何实现SpringBoot集成WebSocket的两种技术方案?

2.兼容性:部分老旧浏览器不支持WebSocket协议。

3.难以实现负载均衡:由于WebSocket连接的持久性,难以在多个服务器之间进行负载均衡。

WebSocket跟常规的localhost:8885/websocket/2"); //socket = new WebSocket("${basePath}websocket/${cid}".replace("www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>Spring Boot+WebSocket+广播式</title> </head> <body onload="disconnect()"> <noscript><h2 style="color: #ff0000">貌似你的浏览器不支持websocket</h2></noscript> <div> <div> <button id="connect" onclick="connect();">连接</button> <button id="disconnect" disabled="disabled" onclick="disconnect();">断开连接</button> </div> <div id="conversationDiv"> <label>输入你的名字</label><input type="text" id="name" /> <button id="sendName" onclick="sendName();">发送</button> <p id="response"></p> </div> </div> <script th:src="@{/js/sockjs.min.js}"></script> <script th:src="@{/js/stomp.min.js}"></script> <script th:src="@{/js/jquery-3.2.1.min.js}"></script> <script type="text/javascript"> var stompClient = null; function setConnected(connected) { document.getElementById('connect').disabled = connected; document.getElementById('disconnect').disabled = !connected; document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden'; $('#response').html(); } function connect() { var socket = new SockJS('/socket'); //1 stompClient = Stomp.over(socket);//2 stompClient.connect({}, function(frame) {//3 setConnected(true); console.log('开始进行连接Connected: ' + frame); stompClient.subscribe('/topic/notice', function(respnose){ //4 showResponse(JSON.parse(respnose.body).responseMessage); }); }); } function disconnect() { if (stompClient != null) { stompClient.disconnect(); } setConnected(false); console.log("Disconnected"); } function sendName() { var name = $('#name').val(); stompClient.send("/app/change-notice", {}, JSON.stringify({ 'name': name }));//5 } function showResponse(message) { var response = $("#response"); response.html(message); } </script> </body> </html>

2.4:对应的js引用可以去网上下载

2.5:浏览器debug访问localhost:8885/system/socket2,点击连接连接到服务器,数据内容可以推送到服务器以及服务器消息回推。

2.6:实现前端和服务端的轮训可以页面Ajax轮训也可以后端添加定时器

@Component @EnableScheduling public class TimeTask { private static Logger logger = LoggerFactory.getLogger(TimeTask.class); @Scheduled(cron = "0/20 * * * * ?") public void test(){ System.err.println("********* 定时任务执行 **************"); CopyOnWriteArraySet<WebSocketServer> webSocketSet = WebSocketServer.getWebSocketSet(); int i = 0 ; webSocketSet.forEach(c->{ try { c.sendMessage(" 定时发送 " + new Date().toLocaleString()); } catch (IOException e) { e.printStackTrace(); } }); System.err.println("/n 定时任务完成......."); } }

代码在github.com/huiyunfei/spring-cloud.git的admin项目里

基于STOMP协议的广播模式和点对点模式消息推送可参考:

www.cnblogs.com/hhhshct/p/8849449.html

www.cnblogs.com/jmcui/p/8999998.html

到此这篇关于springboot集成websocket的两种实现方式的文章就介绍到这了,更多相关springboot集成websocket内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

标签: