服务器上运行mqttserver服务端
一、上传代码到服务器上
mqttserver.js代码
var mosca = require('mosca');
//构建自带服务器
var MqttServer = new mosca.Server({ port: 12345 });
//对服务器端口进行配置, 在此端口进行监听
MqttServer.on('clientConnected', function (client) {
//监听连接
console.log('client connected', client.id);
});
/** * 监听MQTT主题消息 **/
MqttServer.on('published', function (packet, client) {
//当客户端有连接发布主题消息
var topic = packet.topic;
console.log(packet);
switch (topic) {
case 'test': console.log('message-publish', packet.payload.toString());
//MQTT转发主题消息
//
MqttServer.publish({ topic: 'other', payload: 'sssss' });
break;
case 'other':
console.log('message-123', packet.payload.toString());
break;
}
});
MqttServer.on('ready', function () {
//当服务开启时
console.log('mqtt is running...');
});
二、先使用node xx.js启动,解决一下依赖问题
因为这个依赖mosca,所以得先弄一下依赖
进入到放文件的目录,使用普通方法启动
cd /www/server/mqtt/test/mqtt_test/
node mqttserver.js
然后报错
参考之前的文章,配置一下 点我直达
过程和Windows下的都一样,只不过这里使用Linux操作的
Tip:一定注意,改完那个配置文件保存后,不要着急着直接 node xx.js ,一定要先把目录切换回来,切换到mqttserver.js的目录下再执行命令。
运行成功:
三、然后使用pm2 start xx.js 启动
可以调试连接一下,现在就可以正常连接到mqtt服务端了。|ू・ω・` )
四、使用配置文件启动,后面方便更改配置
pm2 start app.json
apps是一个数组,数组中的每一个对象就对应一个pm2中运行的应用
{
"apps": [
{
"name": "mqttserver", // 名称
"script": "./mqttserver.js", // 入口文件
"env": { // 环境
"NODE_ENV": "development"
},
"env_production": {
"NODE_ENV": "production"
},
//"watch": true, //启用监控模式 当应用程序变动时,pm2会自动重载
"instances": 5, // 启用多少个实例
"exec_mode": "cluster", // 应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
//"autorestart" : true, //应用程序崩溃或退出时自动重启
"max_restarts" : 9, // 设置应用程序异常退出重启的次数,默认15次(从0开始计数)
"restart_delay" : 5000, // 异常重启情况下,延时重启时间
"log_date_format" : "YYYY-MM-DD HH:mm Z",
"combine_logs" : true,
"log_file": "/www/server/mqtt/test/mqtt_test/combined.outerr.log", // 日志目录
"out_file": "/www/server/mqtt/test/mqtt_test/out.log",
"error_file": "/www/server/mqtt/test/mqtt_test/err.log",
}
]
}
-
fork模式:单实例多进程,常用于多语言混编,比如php、python等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。
缺点:就是单服务器实例容易由于异常会导致服务器实例崩溃。
-
cluster模式:多实例多进程,但是只支持node,端口可以复用,不需要额外的端口配置,0代码实现负载均衡。
优点:就是由于多实例机制,可以保证服务器的容错性,就算出现异常也不会使多个服务器实例同时崩溃。
把app.json放进来
执行命令
参数说明:
- name:应用程序名称
- args:脚本的参数域
- cwd:应用程序所在的目录
- script:应用程序的脚本路径
- log_date_format:
- node_args:node 的参数域
- error_file:自定义应用程序的错误日志文件
- out_file:自定义应用程序日志文件
- pid_file:自定义应用程序的pid文件
- min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量
- max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)
- cron_restart:定时启动,解决重启能解决的问题
- watch:是否启用监控模式,默认是false。如果设置成true,当应用程序变动时, pm2会自动重载。这里也可以设置你要监控的文件。
- exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs
- exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork
- autorestart:启用/禁用应用程序崩溃或退出时自动重启
- vizion:启用/禁用vizion特性(版本控制)
五、PM2常用命令
#启动
pm2 start app.json
#杀死pm2进程
pm2 kill
#显示进程id为 11 的日志
pm2 logs 1