nodejs+MQTT协议实现远程主机控制
摘抄自百度: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”等也是“支持良好” ^_^
nodejs+MQTT协议实现远程主机控制的更多相关文章
- 转战物联网·基础篇08-例说MQTT协议各控制报文
前面讨论了MQTT协议的控制报文的格式,下面分别举例探讨各个控制报文的详细内容. 01.CONNECT – 连接服务端 客户端到服务端的网络连接建立后,客户端发送给服务端的第一个报文必须是CO ...
- 转战物联网·基础篇07-深入理解MQTT协议之控制报文(数据包)格式
在MQTT协议中,一个控制报文(数据包)的结构按照前后顺序分如下三部分: 结构名 中文名 解释说明 Fixed header 固定报头 报文的最开始部分,所有报文都包含这个部分 Variable ...
- 海鑫智圣:物联网漫谈之MQTT协议
什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...
- 基于MQTT协议进行应用开发
官方协议有句如下的话来形容MQTT的设计思想: "It is designed for connections with remote locations where a "sma ...
- MQTT协议的简单介绍和服务器的安装
最近公司做的项目中有用到消息推送,经过多方面的筛选之后确定了使用MQTT协议,相对于XMPP,MQTT更加轻量级,并且占用用户很少的带宽. MQTT是IBM推出的一种针对移动终端设备的基于TCP/IP ...
- 【转载】MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用
http://blog.csdn.net/xukai871105/article/details/39252653 0 前言 MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联 ...
- 物联网MQTT协议分析和开源Mosquitto部署验证
在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定 ...
- [Micropython][ESP8266] TPYBoard V202 之MQTT协议接入OneNET云平台
随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一.在未来MQTT会进 ...
- 什么是MQTT协议?
MQTT协议介绍 MQTT协议是什么? MQTT(Message Queuing Telemetry Transport Protocol)的全称是消息队列遥感传输协议的缩写,是一种基于轻量级代理的发 ...
随机推荐
- 最长上升子序列问题(O(n^2)算法)
[题目描述] 给定N个数,求这N个数的最长上升子序列的长度. [样例输入] 7 2 5 3 4 1 7 6 [样例输出] 4 什么是最长上升子序列? 就是给你一个序列,请你在其中求出一段不断严格上升的 ...
- 关于pycharm使用sqlite数据可视化的使用
如图
- Linux 网络配置及常用服务配置(Redhat 6)
一.网络配置 1. VMWare 提供了三种网络工作模式供用户选择,他们分别是, ①Bridged(桥接模式): 如果网络中能提供多个IP地址,则使用桥接方式 ②NAT(网络地址转换模式): 如果网络 ...
- Unable to verify your data submission.加入了_csrf也报400错误的解决
<input type="hidden" name="_csrf" value="<?=Yii::$app->request-> ...
- linux在命令符界面如何浏览网页
1.介绍 w3m是个开放源代码的命令行下面的网页浏览器. 它支持表格.框架.SSL连线.颜色.如果是在适当的terminal上,甚至还支持"inline image". 这个软件通 ...
- str 操作方法
# str 类,字符串 # name ='alex' # 首字母变大写 # test ='alex' # v= test.capitalize() # print(v) # # 大写全部变小写 # t ...
- (转)Rsync 排错案例解析
Rsync 排错案例解析 原文:http://blog.51cto.com/irow10/1827306 错误一. 执行计划任务的备份脚本后没有看到备份的文件 1.首先查看crontab日志是否执行文 ...
- 手机web前端调试页面的几种方式
前言 PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂.从模拟调试到远程调试,大概分为几部分: 1.Chrome DevTools(谷歌浏览器)的模拟手机调试 2.weinr ...
- wampserver启动时图标不变绿的解决方法
有2种可能: 1.你安装wamp的时候安装路径中有中文,把路径全部改为英文. 2.其他软件占用了80端口号,解决方法是在服务中找微软的sql server或者其他服务,关掉服务后重启就行了.
- Mac 安装GTK
Mac上配置GTK环境 安装command line工具, 如果安装了Xcode, 就直接跳过该步骤 安装Homebrew 使用brew install pkg-config 使用brew insta ...