1 changed files with 79 additions and 0 deletions
@ -0,0 +1,79 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="en"> |
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
||||
|
<title>WebSocket with STOMP</title> |
||||
|
<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1.5.1/dist/sockjs.min.js"></script> |
||||
|
<script src="https://cdn.jsdelivr.net/npm/stompjs@2.3.3/lib/stomp.min.js"></script> |
||||
|
</head> |
||||
|
<body> |
||||
|
<h2>WebSocket STOMP Client</h2> |
||||
|
<input type="text" id="messageInput" placeholder="Enter your message"> |
||||
|
<button onclick="sendMessage()">Send</button> |
||||
|
<div id="response"></div> |
||||
|
|
||||
|
<script> |
||||
|
let stompClient = null; |
||||
|
let socket = null; |
||||
|
const wsUrl = 'http://localhost:8080/ws'; // WebSocket 服务器地址 |
||||
|
const reconnectInterval = 5000; // 重连间隔(5秒) |
||||
|
|
||||
|
function connectWebSocket() { |
||||
|
console.log("尝试连接 WebSocket..."); |
||||
|
socket = new SockJS(wsUrl); |
||||
|
stompClient = Stomp.over(socket); |
||||
|
stompClient.debug = null; // 关闭调试日志 |
||||
|
|
||||
|
stompClient.connect({}, function (frame) { |
||||
|
console.log('WebSocket 连接成功:', frame); |
||||
|
|
||||
|
// 订阅服务器的推送消息 |
||||
|
stompClient.subscribe('/topic/greetings', function (greeting) { |
||||
|
const response = document.getElementById('response'); |
||||
|
response.innerHTML = 'Server says: ' + greeting.body; |
||||
|
}); |
||||
|
|
||||
|
stompClient.subscribe('/topic/cmd', function (result) { |
||||
|
console.log("命令执行反馈:", result.body); |
||||
|
}); |
||||
|
|
||||
|
}, function (error) { |
||||
|
console.error("WebSocket 连接失败:", error); |
||||
|
attemptReconnect(); |
||||
|
}); |
||||
|
|
||||
|
// 监听 WebSocket 关闭事件,自动重连 |
||||
|
socket.onclose = function () { |
||||
|
console.warn("WebSocket 连接已断开!"); |
||||
|
attemptReconnect(); |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
// **重连机制** |
||||
|
function attemptReconnect() { |
||||
|
if (stompClient !== null) { |
||||
|
stompClient.disconnect(); |
||||
|
} |
||||
|
console.log(`将在 ${reconnectInterval / 1000} 秒后尝试重新连接 WebSocket...`); |
||||
|
setTimeout(connectWebSocket, reconnectInterval); |
||||
|
} |
||||
|
|
||||
|
// **发送消息** |
||||
|
function sendMessage() { |
||||
|
if (stompClient && stompClient.connected) { |
||||
|
const messageInput = document.getElementById('messageInput'); |
||||
|
const message = messageInput.value; |
||||
|
stompClient.send("/app/hello", {}, message); // 发送消息到 "/app/hello" |
||||
|
console.log("消息已发送:", message); |
||||
|
} else { |
||||
|
console.warn("WebSocket 未连接,无法发送消息!"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// **初始化 WebSocket 连接** |
||||
|
connectWebSocket(); |
||||
|
</script> |
||||
|
|
||||
|
</body> |
||||
|
</html> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue