Spring5高级编程------Spring-WebSocket实现在客户端和服务器之间发送消息的全双工单套接字连接

本文详细介绍如何在Spring框架中使用WebSocket,包括WebSocket的基本概念、在Spring中实现WebSocket的方式、使用WebSocket API进行配置的具体步骤,以及基于STOMP协议的WebSocket配置方法。文章还提供了前端测试代码示例,帮助读者快速上手。

一、WebSocket介绍

WebSocket是作为HTML5计划的一部分而开发的一种规范,可以实现在客户端和服务器之间发送消息的全双工单套接字连接。过去,需要实现更新功能的Web应用程序会通过打开多个连接或是使用长轮询来定期轮询服务器端组件以获取更新数据。WebSocket的单套接字能够避免每个客户端需要多个连接并减少开销。
WebSocket

二、Spring中使用WebSocket

从版本4.0开始,Spring框架开始支持WebSocket样式的消息传递以及STOMP作为应用程序级别的子协议。在框架内,可以在spring-websocket模块中找到对WebSocket的支持,该模块与JSR-356兼容。需要注意的是不是所有浏览器都支持WebSocket协议,为了处理这种情况,Spring通过SockJS协议提供了透明的后被选项(根据浏览器的真实情况自动决定使用匹配的协议)。
Spring-WebSocket

三、使用WebSocket API

1、下面是WebSocket API的组件Maven引入方式

注意:SpringMVC项目依赖的其他组件不再这里列出

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-websocket</artifactId>
	<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-messaging</artifactId>
	<version>5.2.6.RELEASE</version>
</dependency>

2、下面是用于测试通信的前端单页面

<!DOCTYPE html>
<html>
<head>
<title>WebSocket Tester</title>
<script type="text/javascript"
	src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
	
</script>
<script type="text/javascript">
	var ping;
	var websocket;
	jQuery(function($) {
   
   
		function writePing(message) {
   
   
			$('#pingOutput').append(message + '\n');
		}

		function writeStatus(message) {
   
   
			$('#statusOutput').val($("#statusOutput").val() + message + '\n');
		}

		function writeMessage(message) {
   
   
			$('#messageOutput').append(message + '\n');
		}

		$('#connect').click(function doConnect() {
   
   
			websocket = new WebSocket($("#target").val());

			websocket.onopen = function(evt) {
   
   
				writeStatus("CONNECTED");

				var ping = setInterval(function() {
   
   
					if (websocket != "undefined") {
   
   
						websocket.send("ping");
					}
				}, 3000);
			};

			websocket.onclose = function(evt) {
   
   
				writeStatus("DISCONNECTED");
			};

			websocket.onmessage = function(evt) {
   
   
				if (evt.data === "ping") {
   
   
					writePing(evt.data);
				} else {
   
   
					writeMessage('ECHO: ' + evt.data);
				}
			};

			websocket.onerror = function(evt) {
   
   
				onError(writeStatus('ERROR: ' + evt.data))
			};
		});

		$('#disconnect').click(function() {
   
   
			if (typeof websocket != 'undefined') {
   
   
				websocket.close();
				websocket = undefined;
			} else {
   
   
				alert("Not connected.");
			}
		});

		$('#send').click(function() {
   
   
			if (typeof websocket != 'undefined') {
   
   
				websocket.send($('#message').val());
			} else {
   
   
				alert("Not connected.");
			}
		});
	});
</script>

</head>
<body>
	<h2>WebSocket Tester</h2>
	Target:
	<input id="target" size="40"
		value="ws://127.0.0.1:8081/wholesmart-springmvc-web/echoHandler">
	<br>
	<button id="connect">Connect</button>
	<button id="disconnect">Disconnect</button>
	<br>
	<br
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豢龙先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值