mosca 服务器发消息topic为repeat问题

客户端发布消息代码:

var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://localhost:8000');
//client.subscribe('presence');
var num = 0;
var qtt={};
qtt.aa='asds';
qtt.bb='地方';
setInterval(function (){
    client.publish('test',JSON.stringify(qtt),{qos:1, retain: true});// 'Hello mqtt ' + (num++)
    client.publish('aaa','JSON.stringify(qtt)',{qos:1, retain: true});// 'Hello mqtt ' + (num++)
}, 5000);

客户端接受topic消息代码

var mqtt = require('mqtt');
var client= mqtt.connect('mqtt://localhost:8000');
client.subscribe('test',{qos:1});//订阅主题为test的消息
client.subscribe('aaa',{qos:1});//订阅主题为test的消息
client.on('message', function (topic, message) {
    console.log('sub',message.toString(),topic);
});

mosca服务器代码

var mosca = require('mosca');
var server  = new mosca.Server({
    port: 8000
});

server.on('ready', setup);
function setup() {
    console.log('Mosca server is up & running');
}

server.on('clientConnected', function (client) {
    console.log('Client Connected: ', client.id);
});

server.on('clientDisconnected', function (client) {
    console.log('Client Disconnected: ', client.id);
});

server.on('published', function (packet, client) {
    // console.log('Published: ', packet);
    switch (packet.topic) {
        case 'test':
            console.log("payload: ", packet.payload.toString());
            var msg = {
                topic: 'repeat',
                payload: packet.payload,
                qos: 0,
                retain: false
            };
            server.publish(msg, function () {
                console.log('repeat!  ');
            });
            break;
        case 'aaa':
            console.log("payload: ", packet.payload.toString());
            var msg = {
                topic: 'repeat',
                payload: packet.payload,
                qos: 0,
                retain: false
            };
            server.publish(msg, function () {
                console.log('repeat!  ');
            });
            break;
    }
});

为什么发布消息的客户端发送的topic为test,接受端订阅的也是test,但是服务器端监听case为test,但发布消息的topic为repeat,为何接受端能接受到消息?服务端发布消息的topic不应该为test才能接受到消息吗?

阅读 2.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进