# 前言
之前使用过基于 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 工具进行测试

