天天看點

mqtt的浏覽器端的簡單使用

mqtt協定如果在浏覽器使用的話,那麼伺服器端就需要建立mosca服務和http服務,浏覽器頁面的mqtt連接配接到http服務端口

伺服器端:

方式一:

var mosca = require(\'mosca\');  
var MqttServer = new mosca.Server({  
    port: 2000,
    http: {
        port: 3006,
        bundle: true,
        static: \'./\'
        } 
}); 

  
MqttServer.on(\'clientConnected\', function(client){  
    console.log(\'client connected\', client.id);  
});  
  
/** 
 * 監聽MQTT主題消息 
 **/  
MqttServer.on(\'published\', function(packet, client) {  
    var topic = packet.topic;  
    console.log(\'message-arrived--->\',\'topic =\'+topic+\',message = \'+ packet.payload.toString());  
   //MQTT轉發主題消息
   //MqttServer.publish({topic: \'test\', payload: \'sssss\'});
});  
  
MqttServer.on(\'ready\', function(){  
    console.log(\'mqtt is running...\');  
    //MqttServer.authenticate = authenticate;  
});  
      

  方式二:

var http     = require(\'http\')
  , httpServ = http.createServer()
  , mosca    = require(\'mosca\')
  , mqttServ = new mosca.Server({port: 2000});

mqttServ.attachHttpServer(httpServ);

httpServ.listen(3006);
MqttServer.on(\'clientConnected\', function(client){  
    console.log(\'client connected\', client.id);  
}); 
      

  浏覽器用戶端://端口為http端口 mqtt://localhost:3006 和 ws://localhost:3006一樣, 

                        web頁面沒有其他要求,沒有跨域問題

<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title></title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
        <!--[if lt IE 7]>
            <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="#">upgrade your browser</a> to improve your experience.</p>
        <![endif]-->
        <div>hello mqtt</div>
        <script src="../public/js/jquery-1.9.1.min.js"></script>
    
        <script src="../public/mqtt.min.js"></script>
        <script>
            ////端口為http端口 mqtt://localhost:3006 和 ws://localhost:3006一樣
           var client  = mqtt.connect(\'ws://localhost:3006\',{  

            });  
 // you add a ws:// url here
  client.subscribe("mqtt/demo");
  client.on(\'connect\', function () {  
    console.log(\'connected.....\');  
    // client.subscribe(\'test/\');  
    // client.publish(\'app2dev/\', \'Hello mqtt\');  
});  
  client.on("message", function (topic, payload) {
    alert([topic, payload].join(": "));
    
  })
 
  client.publish("mqtt/demo", "hello world!");
  </script>
    </body>
</html>