# 前言

之前使用过基于 Mosquitto2.0 的 MQTT 协议,安装软件极其麻烦.

所以寻找一个简单快捷的方式搭建一个 MQTT 服务器,刚好 Mosca 就是一个最好的选项.

Mosca 实现了 MQTT 协议,并且支持多种发布 / 订阅提供商,在应用上也更方便快捷.

缺点是 Mosca 已经不再维护了,最新只支持 MQTT3.1.1 的版本,对 MQTT5.0 的支持就没那么好了,不过也够用就是了.

# 安装 Mosca

安装还是很方便的,这里我们使用 redis 作为发布 / 订阅的提供商.

h
$ npm install mosca redis --save

# 写一个最简单的 MQTT 服务器

t
const mosca = require("mosca");
const pubsubsettings = {
    type: 'redis',
    redis: require('redis'),
    db: 0,
    port: 6379,
    return_buffers: true,
    host: "localhost",
    password:"123456"
};
const moscaSettings = {
    port: 1883,
    backend: pubsubsettings
};
const server = new mosca.Server(moscaSettings);
server.on('ready', setup);
server.on('clientConnected', function(client) {
    console.log('client connected', client.id);
});
server.on('published', function(packet, client) {
    console.log('Published', packet.topic, packet.payload.toString());
});
function setup() {
    console.log(`Mosca server is up and running in ${moscaSettings.port}!`);
}

这是 Mosca 文档

# 测试连接

启动的时候发现报了一个错误

h
~/code/node/mqtt/node_modules/jsonschema/lib/validator.js:110
    throw new SchemaError('Expected `schema` to be an object or boolean');
    ^
SchemaError: Expected `schema` to be an object or boolean
    at Validator.validate (/Users/h/code/node/mqtt/node_modules/jsonschema/lib/validator.js:110:11)
    at Object.validate (/Users/h/code/node/mqtt/node_modules/mosca/lib/options.js:264:26)
    at new Server (/Users/h/code/node/mqtt/node_modules/mosca/lib/server.js:104:34)
    at Object.<anonymous> (/Users/h/code/node/mqtt/index.js:21:16)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  schema: undefined
}

可以暂时把该文件的 109~111 行注释掉就可以启动起来了.

h
$ node index.js
  
  Mosca server is up and running in 1883!

我们用 MQTTX 工具进行测试

mqttx

请我喝杯[咖啡]~( ̄▽ ̄)~*

一个放羊娃 微信支付

微信支付

一个放羊娃 支付宝

支付宝