我想在我的mosquitto服務器上建立一個帶有TLS加密的Websocket連接。但我甚至沒有得到一個運行著官方mosquitto服務器的簡單例子。
<! DOCTYPEhtml>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title> Hello MQTT World</title>
<meta name="viewport" content="width=device-width, initial-scale=1" >
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script>
//全域初始化一個mqtt變數
console.log(mqtt)
// 連接選項
const options = {
clean: true, // 保留會話
connectTimeout: 4000, // 超時周期
// 認證資訊
clientId: 'test_client',
}
// 連接字串,并通過協議指定連接方法
// ws 未加密的WebSocket連接
// wss 加密的WebSocket連接
// mqtt 未加密的TCP連接
// mqtts 加密的TCP連接
// wxs 微信小程式連接
// alis 支付寶小程式連接
const connectUrl = 'wss://test.mosquitto.org:8081/mqtt' 。
const client = mqtt.connect(connectUrl,options)
client.on('reconnect', (error) => {
console.log('reconnectioning:', error)
})
client.on('error', (error) => {
console.log('連接失敗:', error)
})
client.on('message', (topic, message) => {
console.log('接收訊息:', topic, message.toString()
})
</script>
</head>
<body>
<div id="logger"></div>
</body>
</html>
在網路日志中我可以看到這些陳述句:
...
[1]</</</v.prototype._setupReconnect
https://unpkg.com/mqtt/dist/mqtt.min.js:1:14126。
[1]</</</v.prototype._cleanUp>
https://unpkg.com/mqtt/dist/mqtt.min.js:1:15261。
[1]</</</v.prototype. _setupStream/this.connackTimer<
https://unpkg.com/mqtt/dist/mqtt.min.js:1:7007。
(Async。setTimeout handler) [1]</< /< /v. prototype._setupStream。
https://unpkg.com/mqtt/dist/mqtt.min.js:1:6920。
[1]</</</v.prototype._reconnect
https://unpkg.com/mqtt/dist/mqtt.min.js:1:13732。
[1]</</</v.prototype._setupReconnect/e.reconnectTimer<。
https://unpkg.com/mqtt/dist/mqtt.min.js:1:14195?
(Async。setInterval handler)
...
Firefox(Mozilla Firefox for Linux Mint 89.0 (64-bit))給出了錯誤資訊Firefox不能與wss://test.mosquitto.org:8081/mqtt的服務器建立連接。
也許有人能給我一個提示,我的設定出了什么問題?或者提供一個可以作業的JavaScript例子?
提前感謝。
克里斯托夫 uj5u.com熱心網友回復: 首先增加連接超時,你目前設定的是4秒,默認是30秒。因為 test.mosquitto.org 是一個完全公開的代理,它經常被人們敲打(要么是在測驗東西,要么就是不知道自己在做什么),所以一個較長的超時時間會更好。
其次,擁有 第三,即使你連接了,你實際上也沒有做任何事情,你沒有進行任何訂閱,所以on 例如,
標籤: 上一篇:從執行緒Flask的安全資料庫查詢(peewee)。
下一篇:System.ArgumentException:"提供的URI方案'http'無效;預期為'https'。引數名稱:via"
test_client的客戶端ID非常有可能與另一個客戶端發生沖突,因此只要另一個客戶端試圖重新連接,你的客戶端就會被踢出代理服務器,這將導致你的客戶端重新連接,造成連接/斷開回圈。客戶端ID需要在所有連接到經紀商的客戶中是唯一的,我建議你把它改為一個對你來說唯一的前綴和一個亂數字相結合。
message事件處理程式將永遠不會被呼叫。你甚至沒有一個 on connect 事件處理程式來了解你是否曾被干凈地連接。
<! DOCTYPEhtml>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title> Hello MQTT World</title>
<meta name="viewport" content="width=device-width, initial-scale=1" >
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script>
//全域初始化一個mqtt變數
console.log(mqtt)
// 連接選項
const options = {
clean: true, // 保留會話
connectTimeout: 30000, // 超時周期增加到30秒
// 認證資訊
clientId。'foobar_test_random' Math.floor(Math.random() * 10000)。
}
// 連接字串,并通過協議指定連接方法
// ws 未加密的 WebSocket 連接
// wss 加密的WebSocket連接
// mqtt 未加密的TCP連接
// mqtts 加密的TCP連接
// wxs 微信小程式連接
// alis 支付寶小程式連接
const connectUrl = 'wss://test.mosquitto.org:8081' 。
const client = mqtt.connect(connectUrl,options)
//在連接成功的情況下實際訂閱一些東西
client.on('connect', (connack) => {
client.subscribe('$SYS/#')
})
client.on('reconnect', (error) => {
console.log('reconnecting:', error)
})
client.on('error', (error) => {
console.log('連接失敗:', error)
})
client.on('message', (topic, message) => {
console.log('接收訊息:', topic, message.toString()
})
</script>
</head>
<body>
<div id="logger"></div>
</body>
</html>
