博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nodejs+MQTT协议实现远程主机控制
阅读量:6379 次
发布时间:2019-06-23

本文共 1744 字,大约阅读时间需要 5 分钟。

摘抄自百度: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”等也是“支持良好” ^_^

转载于:https://www.cnblogs.com/luoc83/p/8426379.html

你可能感兴趣的文章
排查VMWare虚拟机的性能问题
查看>>
yum安装Apache Web Server后各个文件存放位置
查看>>
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
查看>>
Android于JNI调用列出的程序
查看>>
CSS3-border-radius 属性
查看>>
解决Activity启动黑屏和设置android:windowIsTranslucent不兼容activity切换动画的问题
查看>>
C#开发SQLServer的Geometry和Geography存储
查看>>
EBS R12.2应用层关闭脚本的执行过程
查看>>
js:深闭包(范围:上)
查看>>
使用POI导入小数变成浮点数异常
查看>>
司机福利!Uber即将可以自己选目的地接单啦!
查看>>
MOGODB REDIS
查看>>
[java] java 中Unsafe类学习
查看>>
P1739 表达式括号匹配
查看>>
3.1.4 模板字符串
查看>>
Qt 3D教程(二)初步显示3D的内容
查看>>
100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)【转】
查看>>
compareTo返回值为-1 、 1 、 0 的排序问题
查看>>
Being a Good Boy in Spring Festival(杭电1850)(尼姆博弈)
查看>>
互联网+时代IT管理者的转型
查看>>