springboot webSocket SimpMessagingTemplate

基于http协议

后端:

setp:1、引入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

setp:2、配置registry

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS();
    }
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/queue","/topic","/user");
        registry.setUserDestinationPrefix("/user");
    }
}

setp:3、接口

注入:SimpMessagingTemplate 调用convertAndSendToUser来推送消息

@Service
public class DisplayService {
    @Autowired
    private SimpMessagingTemplate simpMessagingTemplate;

    public void showWelcomeTo(String code, MsgEntity showWelcomeTo) {
        MsgEntity entity = new MsgEntity();
        BeanUtils.copyProperties(showWelcomeTo, entity);
        entity.setType(2);
        simpMessagingTemplate.convertAndSendToUser(code, "/queue/info", entity);
    }

    public void showAllMsg(String code) {
        MsgEntity entity = new MsgEntity();
        entity.setType(1);
        simpMessagingTemplate.convertAndSendToUser(code, "/queue/info", entity);
    }
}

前端

引入:sockjs-1.1.0.min.js (自行到网上下載)

.js

var start = null;
var socket = null;
var stompClient = null;
function reconnect() {
	let code= getLastRequestPath(window.location.href)
	console.log("Curent lane :"+code)

	var url = "/user/"+laneCode+"/queue/info";
	// 链接Socket
	socket = new SockJS(window.location.hostname + ':' + window.location.port+'/websocket');  //与后端配置得地址一致(配置registry)
	console.log('Connected:%o', socket);
	// 使用STOMP子协议的WebSocket客户端
	stompClient = Stomp.over(socket);
	// 链接WebSocket服务端
	stompClient.connect({}, function(frame) {
		// 車輛入口信息
		stompClient.subscribe(url,function(event) {
			var obj = JSON.parse(event.body);
            console.log("type="+obj.type)
			if (obj.type == "1"){
				showWelcome(obj)
			}
			if (obj.type == "2"){
				showEntryInfo(obj)
			}
			if (obj.type == "3"){
				showUseOctopusCard(obj)
			}
			if (obj.type == "4"){
                showExitInfo(obj)
			}

		});
		// 判斷重連
		if (stompClient.connected) {
			clearInterval(start);
			start = null;
			console.log("服務器已鏈接!");
		}
		console.log(stompClient.connected);
	});
	socket.onclose = function() {
		console.log("服務器關閉了鏈接,請刷新頁面!");
	};
}

function getLastRequestPath(url){
	//获取最后一个/的位置
	let site = url.lastIndexOf("\/");
	//截取最后一个/后的值
	return url.substring(site + 1, url.length);
}



$(function() {
	reconnect();
	window.addEventListener("offline", function(e) {
		console.log("offline");
		if (stompClient != null) {
			stompClient.disconnect();
		}
		socket.close();
		console.log("服務器鏈接已斷開,正在嘗試重新鏈接...");
		console.log(stompClient.connected);
	});

	window.addEventListener("online", function(e) {
		console.log("online");
		start = setInterval(reconnect, 3000);
	});
});

.html

	<script>
    var myVar;
    var time = 10;
    setInterval(timeInterval, 1000);
    function timeInterval() {
        // console.log(time)
        if (time == 0) {
            showWelcome();
            time = 10;
        } else {
            time--
        }
    }
    function showWelcome() {
        $('#welcomeTo').show()
        $('#entryInfo').hide()
    }
    function showEntryInfo(obj) {
        document.getElementById('car_plate').innerHTML = obj.carplate;
        document.getElementById('mode_of_access').innerHTML = obj.modeOfAccess;
        document.getElementById('entry_time').innerHTML = obj.entryTime;
        $('#welcomeTo').hide()
        $('#entryInfo').show()
        time = 10
    }
</script>

码云

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot WebSocket Stomp是一种基于Spring Boot框架的WebSocket协议的实现方式,它可以实现实时通信和消息推送功能。Stomp是一种简单的消息传输协议,它可以在WebSocket之上提供一个可靠的消息传输机制。使用Spring Boot WebSocket Stomp可以轻松地实现WebSocket通信,同时也可以使用Stomp协议来传输消息。这种方式非常适合实现实时通信和消息推送功能,例如在线聊天、实时监控等场景。 ### 回答2: springboot websocket stomp是一种基于Java的开源框架,它可以帮助我们实现实时通信功能。它采用了WebSocket协议作为底层通信协议,并结合了STOMP(Simple Text Oriented Messaging Protocol)协议来进行消息的传输和解析。 使用springboot websocket stomp可以很方便地实现客户端和服务器之间的实时通信,比如聊天室、实时数据展示等功能。它的好处是能够降低开发成本,提高开发效率,同时还可以提供较好的用户体验。 在使用springboot websocket stomp时,首先需要进行相关的配置和依赖,然后在代码中定义好相关的消息处理器,用于处理客户端发送过来的消息和服务器推送的消息。接下来,我们可以使用JS等前端技术来调用WebSocket对象,连接到指定的WebSocket服务端,并发送和接收消息。 在WebSocket连接建立之后,我们可以使用STOMP协议进行消息的发送和订阅。我们可以使用STOMP协议中的几个关键命令,比如SEND、SUBSCRIBE、UNSUBSCRIBE等来进行消息的发送和订阅操作。 springboot websocket stomp还提供了一些注解,用于标识和定义消息的处理器、消息的目的地等属性。通过这些注解,我们可以很方便地控制消息的发送和接收。 总的来说,springboot websocket stomp提供了一种简单且效率高的方式来实现实时通信功能。它的易用性、扩展性和可靠性使得它在实际应用中得到广泛的应用。 ### 回答3: Spring Boot是一种用于简化Spring应用程序开发的框架,它提供了许多便利的功能和自动配置的特性。WebSocket是一种在客户端和服务器之间建立持久连接的协议,它为实时双向通信提供了一个解决方案。Stomp是一种在WebSocket之上建立消息传递协议的简单文本协议。 Spring Boot提供了对WebSocket和Stomp的支持,使开发人员能够轻松实现实时通信功能。通过使用Spring Boot的WebSocket和Stomp支持,可以快速构建具有实时功能的应用程序。 在Spring Boot中使用WebSocket和Stomp,首先需要在pom.xml文件中添加相关依赖。然后,在应用程序的配置类中使用@EnableWebSocketMessageBroker注解启用WebSocket和Stomp的消息代理功能。接下来,使用@MessageMapping注解来定义处理WebSocket消息的方法。 在处理WebSocket消息的方法中,可以使用@SendTo注解将消息发送到指定的目的地,也可以使用SimpMessagingTemplate来主动推送消息给客户端。 另外,还可以使用@SubscribeMapping注解来定义处理订阅请求的方法。通过在订阅请求方法中返回需要订阅的数据,可以在客户端成功订阅后立即将数据发送给客户端。 通过使用Spring Boot的WebSocket和Stomp支持,我们可以轻松地实现实时通信功能,使应用程序能够实时传递消息和数据。这对于需要实时更新的应用程序非常有用,如聊天室、股票交易系统等。 总而言之,Spring Boot提供了对WebSocket和Stomp的支持,使开发人员能够方便地构建具有实时通信功能的应用程序。通过使用WebSocket和Stomp,我们可以实现实时传递消息和数据的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值