前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mqtt实现自动监听服务器消息

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

作者头像
用户2145235
发布2018-05-18 15:34:45
3K0
发布2018-05-18 15:34:45
举报
文章被收录于专栏:前端吧啦吧啦前端吧啦吧啦

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

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

   安装好mqtt:    npm install mqtt --save

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

  安装好mosca:  npm install mosca --save

代码语言:javascript
复制
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 ... ');
});

   订阅消息(接收):    

代码语言:javascript
复制
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.消息需要回复确认。

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

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

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

    MQTT具备以下特点:

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

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

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

    WebSocket的不同在于:

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档