您的位置:首页 > 编程语言 > Qt开发

nodejs+MQTT协议实现远程主机控制

2018-02-07 14:23 281 查看
摘抄自百度:MQTT(MessageQueuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。

所谓物联网,就是“万物互联”,我们的电脑、工控机、开发板什么的也是“物体”,当然也可以加入“物联网”。

远程控制电脑,有很多种方法,如Mstsc、TeamViewer、VNC、SSH、QQ远程等。在我参与过的几个物联网项目中,有这么一个共性需求:远程执行一些命令,主要是查看主机状态、资源占用情况、下载文件、重启、查看日志等。想想看,如果在本地,不就是执行控制台命令吗?那么可以远程发送命令,待其执行后,返回控制台回显字符串,这个过程模拟了本地执行控制台的全过程。当然,这种方式有一定局限性,最好只用于单步命令。

Nodejs跨平台、插件丰富的特性,使得它特别适合做驻机服务。另外,q.emqtt.com是网上找到的一个免费MQTT服务。下面是利用Nodejs+MQTT插件实现的驻机控制端:

*****************************cmd.js*******************************

const child_process = require('child_process');
var mqtt =require('mqtt');
 
var client= mqtt.connect('mqtt://user:psw@q.emqtt.com:1883');
 
client.on('connect',
function () {
   client.subscribe('/luoc83');//任意订阅一个主题,注意不要与其它客户端冲突
});
 
client.on('message',
function (topic, message) {//接收到消息推送并处理
   console.log(message.toString());
   var msgObj= JSON.parse(message.toString());
   var from =msgObj["from"];
   var cmd =msgObj["cmd"];
 
   var workerProcess = child_process.exec(cmd,
      function (error,stdout, stderr) {
          client.publish(from, stdout);
      });
});

 

*****************************send.js*******************************

var mqtt =require('mqtt');
var client= mqtt.connect('mqtt://user:psw@q.emqtt.com:1883');
client.on('connect',
function () {
   var id =
'/user007';
   client.subscribe(id);
   var cmd = {"from": id,
"cmd":
"dir d:\\360" };
   client.publish('/luoc83', JSON.stringify(cmd));
});
 
client.on('message',
function (topic, message) {
   console.log(message.toString());
});

 

**********************************************************

测试步骤:

1)安装mqtt 插件: npm install mqtt

2)启动驻机控制端: node cmd.js

3)启动测试发送端: node send.js,将会接收到命令的回显字符串

 

我是在windows平台下,测试发送 “dir d:\\360” 命令,其它命令如”ping 192.168.0.1” 、”ipconfig”等也是“支持良好” ^_^

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: