Mqtt и Websocket одновременно с Aedes - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь заставить Aedes работать в качестве MQTT-брокера и сервера Websocket. В соответствии с этим сделайте c: https://github.com/moscajs/aedes/blob/master/docs/Examples.md что я должен понять. В идеале я хочу, чтобы слушатель запускался независимо от того, является ли он клиентом веб-сокета или клиентом mqtt.

Можно ли сделать что-то вроде:

server.broadcast ('foo / bar', { data: ''})

и все клиенты, websockets и mqtt получают сообщение? Do c не очень понятен, и я очень удивлен, что используется websocket-stream. Это очень низкий уровень, не так ли?

вот какой-то код на стороне сервера:

    const port = 1883

    const aedes = require('aedes')({

        persistence: mongoPersistence({
            url: 'mongodb://127.0.0.1/aedes-test',
            // Optional ttl settings
            ttl: {
                packets: 300, // Number of seconds
                subscriptions: 300
            }
        }),
        authenticate: (client, username, password, callback) => {



        },
        authorizePublish: (client, packet, callback) => {

        },

        authorizeSubscribe: (client, packet, callback) => {

        }
    });

    //const server = require('net').createServer(aedes.handle);
    const httpServer = require('http').createServer()
    const ws = require('websocket-stream')
    ws.createServer({ server: httpServer }, aedes.handle)


    httpServer.listen(port, function () {
        Logger.debug('Aedes listening on port: ' + port)
        aedes.publish({ topic: 'aedes/hello', payload: "I'm broker " + aedes.id })
    });

1 Ответ

0 голосов
/ 12 марта 2020

Это просто случай запуска обоих серверов с одним и тем же объектом aedes следующим образом:

const port = 1883
const wsPort = 8883

const aedes = require('aedes')({

    persistence: mongoPersistence({
        url: 'mongodb://127.0.0.1/aedes-test',
        // Optional ttl settings
        ttl: {
            packets: 300, // Number of seconds
            subscriptions: 300
        }
    }),
    authenticate: (client, username, password, callback) => {



    },
    authorizePublish: (client, packet, callback) => {

    },

    authorizeSubscribe: (client, packet, callback) => {

    }
});

const server = require('net').createServer(aedes.handle);
const httpServer = require('http').createServer()
const ws = require('websocket-stream')
ws.createServer({ server: httpServer }, aedes.handle)

server.listen(port, function() {
    Logger.debug('Ades MQTT listening on port: ' + port)
})

httpServer.listen(wsPort, function () {
    Logger.debug('Aedes MQTT-WS listening on port: ' + wsPort)
    aedes.publish({ topic: 'aedes/hello', payload: "I'm broker " + aedes.id })
});
...