基于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>