mqtt实现自动监听服务器消息

Posted zhoulin-circle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mqtt实现自动监听服务器消息相关的知识,希望对你有一定的参考价值。

  本示例借助meteor的一个环境跑,和我们平时用的node自己搭的环境或java,php的环境本质一样,在此不多讨论。

   首先需求是:多系统对接进行消息实时传递。

   安装好mqtt:    npm install mqtt --save

   本地服务(可以直接配在java中):这里采用mosca

  安装好mosca:  npm install mosca --save

var mosca=reqire(\'mosca\');
var mqttServer=new mosca.Server({port:8000});  //设置监听端口
//published监听所发布的消息
mqttServer.on(\'published\',function(packet,client){
  console.log(\'published----\',packet);
  switch(packet.topic){    //topic字段是消息主题,可以理解为接口中的方法名
    case \'test\':        //不同的订阅主题,发布消息不同
    console.log(packet.payload.toString());
    mqttServer.publish({topic:\'other\',payload:\'测试不同主题!\'});  
    break;
    case \'other\':
    console.log(packet.paload.toString());
    break;
}
});
//服务开启时给个提示: mqttServer.on(
\'ready\',function(){   console.log(\'Mosca server is running ... \'); });

   订阅消息(接收):    

var mqtt=require(\'mqtt\');
var client=mqtt.connect(\'tcp://172.19.5.217:8000\');  //本地建立连接
//模拟一个消息发送
var msg={talk:\'this is test!!\',name:\'测试\'};
//轮洵发送,仅做测试用,实际场景不需要轮洵
setInterval(function(){
  client.publish(\'test\',JSON.stringify(msg),{qos:1,retain:true});  //发布一条主题为test的消息,
},60000);
client.subscribe(\'test\');  //订阅主题为test的消息
client.on(\'message\',function(topic,message){
  var result=JSON.parse(message.toString());  //接收到新消息,并对其进行处理
  try{
    console.log(\'result---->\',result);

    //****do something **** 
  }catch(e){
    console.log(\'error---->\',result);
  }
})

  publish()方法接收四个参数publish(topic,message,[options],[callback]);

    topic: 消息主题;

    message:传递的消息;

    options:指定参数值:qos :服务质量级别,默认为0 (消息最多发送一次,不管是否接收到)

               retain:默认为false,推送至当前订阅就释放这条消息。设为true,表示服务器要保留这次推送的信息,如果新的订阅者出现,就把这条消息推送给它。

               dup:保证消息可靠传输,默认为false,只占用一个字节,表示第一次发送。不能用于检测消息重复发送等。注意需要满足以下条件:

              1.当QoS > 0,即消息至少传递一次)

              2.消息需要回复确认。

               此时,在可变头部需要包含消息ID(即client.id)。当值为1时,表示当前消息先前已经被传送过。

     这样一个简单的消息监听功能就做好了,我这边是做一个接收消息自动发送功能,效果如下:

 

   由于我做即时聊天有用到websocket,与mqtt都是与服务器保持长连接,进行消息传递。那么,来对比一下MQTT和WebSocket有什么区别?

    MQTT具备以下特点:

    1.采用发布/订阅消息传输协议,设计思想开放,简单,轻量。

    2.网络代码高,比较依赖网络。

    3.有三种服务质量:至多一次,只有一次,至少一次。前两者会有风险,后者会负载过重。

    WebSocket的不同在于:

    1.提供使用一个TCP连接进行双向通讯机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通讯。

    2.借用HTTP和HTTPS端口,与TCP建立连接和关闭连接时握手。传输消息采用TCP协议。

  具体应用时,我们只需要根据实现场景及两者的特点,选择更合适的通讯方式即可。

   

 

以上是关于mqtt实现自动监听服务器消息的主要内容,如果未能解决你的问题,请参考以下文章

Springboot整合mqtt客户端实现发送与接收消息

转: RabbitMQ实现中AMQP与MQTT消息收发异同

Go MQTT 客户端在收到大约 2400 条消息后停止监听新消息

Android MQTT 通信

Android使用MQTT订阅及发布消息(初步了解Mqtt以及实现Android操作mqtt服务)

物联网 DFrobot 掌控版的使用 智能灯和MQTT