博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mqtt实现自动监听服务器消息
阅读量:4988 次
发布时间:2019-06-12

本文共 2242 字,大约阅读时间需要 7 分钟。

  本示例借助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协议。

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

   

 

转载于:https://www.cnblogs.com/zhoulin-circle/p/7475206.html

你可能感兴趣的文章
HTML5小游戏【是男人就下一百层】UI美化版
查看>>
SSH免密登陆
查看>>
java根据图片和文字生成自定义图片
查看>>
《ASP.NET SignalR系列》第五课 在MVC中使用SignalR
查看>>
Catenyms (POJ2337) 字典序最小欧拉路
查看>>
ZT : 优秀程序员的两大要素:懒 + 笨
查看>>
Centos6.5-dnsmasq安装
查看>>
PyCharm+Eclipse共用Anaconda的数据科学环境
查看>>
笔记3 | 通过onWindowAttributesChanged和onSystemUiVisibilityChange监听状态栏页面的隐藏与显示、动态显示与隐藏状态栏...
查看>>
msysgit 上传文件夹,规范化的日常
查看>>
CSS清除浮动
查看>>
Zookeeper之ZKClient的使用
查看>>
WTF小程序之animation
查看>>
那些前端二进制操作API
查看>>
一 、Spring Boot 学习之项目搭建
查看>>
一键部署joomla开源内容管理平台
查看>>
opencv画图
查看>>
Python-爬虫-12306购票业务实现
查看>>
010. windows10下安装kivy 1.9.1版
查看>>
AS3.0判断数组中最大值
查看>>