Ubuntu下搭建Mqtt服務,跑Websocket JS客戶端
一、執行環境Ubuntu14.04
二、安裝依賴
- sudo apt-get update
- sudo apt-get install g++
- sudo apt-get install cmake
- sudo apt-get install openssl
- sudo apt-get install libssl-dev
- sudo apt-get install xsltproc
- sudo apt-get install docbook-xsl
- sudo apt-get install docbook-defguide
- sudo apt-get install build-essential
- sudo apt-get install libc-ares-dev
- sudo apt-get install uuid-dev
- sudo apt-get install daemon
- sudo apt-get install libwebsockets-dev
三、安裝libwebsockets(Websocket支援)
- git clone https://github.com/warmcat/libwebsockets.git
- cd libwebsockets
- mkdir build
- cd build
- cmake ..
- make
- sudo make install
- sudo ldconfig
四、安裝Mosquitto(Mqtt伺服器)
port 1883
listener 1884
protocol websockets
- git clone https://github.com/eclipse/mosquitto.git
- cd mosquitto
- 更改configure.mk中
WITH_WEBSOCKETS:=yes
WITH_SRV:=no- make
- sudo make install
- sudo cp mosquitto.conf /etc/mosquitto
- 請在/etc/mosquitto/mosquitto.conf 的“Default Listener” 一節新增如下幾行:
五、執行mqtt服務
mosquitto -c /etc/mosquitto/mosquitto.conf
六、測試mqtt
mosquitto_sub -h 127.0.0.1 -p 1883 -t "track" -v (訂閱訊息,主題為“track”)
mosquitto_pub -h 127.0.0.1 -t "track" -m "test message" (傳送訊息)
七、MQTT協議 Websocket JS客戶端
<html>
<head>
<title>Mosquitto Websockets</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js" type="text/javascript"></script>
<script src="https://code.jquery.com/jquery-1.8.3.min.js" type="text/javascript"></script><script type="text/javascript">
var mqtt;
var reconnectTimeout = 3000;
var host = '127.0.0.1'; // hostname or IP address
var port = 1884;
var topic = 'track'; // topic to subscribe to
var useTLS = false;
var username = null;
var password = null;
// username = "test";
// password = "123456";
var cleansession = true;function MQTTconnect() {
mqtt = new Paho.MQTT.Client(
host,
port,
"web_" + parseInt(Math.random() * 100,
10));
var options = {
timeout: 3,
useSSL: useTLS,
cleanSession: cleansession,
onSuccess: onConnect,
onFailure: function (message) {
$('#status').val("Connection failed: " + message.errorMessage + "Retrying");
setTimeout(MQTTconnect, reconnectTimeout);
}
};mqtt.onConnectionLost = onConnectionLost;
mqtt.onMessageArrived = onMessageArrived;if (username != null) {
options.userName = username;
options.password = password;
}
console.log("Host="+ host + ", port=" + port + " TLS = " + useTLS + " username=" + username + " password=" + password);
mqtt.connect(options);
}function onConnect() {
$('#status').val('Connected to ' + host + ':' + port);
// Connection succeeded; subscribe to our topic
mqtt.subscribe(topic, {qos: 0});
$('#topic').val(topic);
}function onConnectionLost(response) {
setTimeout(MQTTconnect, reconnectTimeout);
$('#status').val("connection lost: " + responseObject.errorMessage + ". Reconnecting");};
function onMessageArrived(message) {
var topic = message.destinationName;
var payload = message.payloadString;$('#ws').prepend('<li>' + topic + ' = ' + payload + '</li>');
};function button_onclick(){
//這裡寫你要執行的語句
var tp = $('#sendtopic').val();
var val = $('#textsend').val();
if(tp==''||val=='')
{
alert("no aaa");
return;
}
var message = new Paho.MQTT.Message(val);
message.destinationName = tp;
message.qos=0;
mqtt.send(message);
// mqtt.publish(tp, 0, val);
$('#ws').prepend('<li>' + tp + ' = ' + val+ '</li>');
};$(document).ready(function() {
MQTTconnect();
});</script>
</head>
<body>
<h1>Mosquitto Websockets</h1>
<div>
<div>Subscribed to <input type='text' id='topic' disabled />
Status: <input type='text' id='status' size="30" disabled />
</br>
publish to <input type='text' id='sendtopic' /> text <input type='text' id='textsend' size="30"/>
Status: <input type='button' value="send" id='btn' onclick="javascript:button_onclick()"/></div>
<ul id='ws' style="font-family: 'Courier New', Courier, monospace;"></ul>
</div>
</body>
</html>