• 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协议。

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

       

  • 相关阅读:
    Java技术之ThreadLocal的使用
    find and find_by
    vim-config
    把字符串当做js代码执行的方法
    lodop打印设计
    前端使用lodop如何获取打印状态
    lodop第三方插件的使用
    nodejs中http服务器,如何使用GET,POST请求发送数据、npm、以及一些插件的介绍
    nodejs 用http模块搭建的服务器的路由,以及路由代码的重构过程
    nodejs基础 用http模块 搭建一个简单的web服务器 响应JSON、html
  • 原文地址:https://www.cnblogs.com/zhoulin-circle/p/7475206.html
Copyright © 2020-2023  润新知