# 前言
之前使用过基于 Mosquitto2.0
的 MQTT 协议,安装软件极其麻烦.
所以寻找一个简单快捷的方式搭建一个 MQTT 服务器,刚好 Mosca
就是一个最好的选项.
Mosca
实现了 MQTT 协议,并且支持多种发布 / 订阅提供商,在应用上也更方便快捷.
缺点是 Mosca
已经不再维护了,最新只支持 MQTT3.1.1 的版本,对 MQTT5.0 的支持就没那么好了,不过也够用就是了.
# 安装 Mosca
安装还是很方便的,这里我们使用 redis
作为发布 / 订阅的提供商.
$ npm install mosca redis --save |
# 写一个最简单的 MQTT 服务器
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 文档
# 测试连接
启动的时候发现报了一个错误
~/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
行注释掉就可以启动起来了.
$ node index.js | |
Mosca server is up and running in 1883! |
我们用 MQTTX
工具进行测试