摘抄自百度: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协议实现远程主机控制的更多相关文章

  1. 转战物联网·基础篇08-例说MQTT协议各控制报文

      前面讨论了MQTT协议的控制报文的格式,下面分别举例探讨各个控制报文的详细内容. 01.CONNECT – 连接服务端   客户端到服务端的网络连接建立后,客户端发送给服务端的第一个报文必须是CO ...

  2. 转战物联网·基础篇07-深入理解MQTT协议之控制报文(数据包)格式

      在MQTT协议中,一个控制报文(数据包)的结构按照前后顺序分如下三部分: 结构名 中文名 解释说明 Fixed header 固定报头 报文的最开始部分,所有报文都包含这个部分 Variable ...

  3. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  4. 基于MQTT协议进行应用开发

    官方协议有句如下的话来形容MQTT的设计思想: "It is designed for connections with remote locations where a "sma ...

  5. MQTT协议的简单介绍和服务器的安装

    最近公司做的项目中有用到消息推送,经过多方面的筛选之后确定了使用MQTT协议,相对于XMPP,MQTT更加轻量级,并且占用用户很少的带宽. MQTT是IBM推出的一种针对移动终端设备的基于TCP/IP ...

  6. 【转载】MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用

    http://blog.csdn.net/xukai871105/article/details/39252653 0 前言     MQTT是IBM开发的一个即时通讯协议.MQTT是面向M2M和物联 ...

  7. 物联网MQTT协议分析和开源Mosquitto部署验证

    在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定 ...

  8. [Micropython][ESP8266] TPYBoard V202 之MQTT协议接入OneNET云平台

    随着移动互联网的发展,MQTT由于开放源代码,耗电量小等特点,将会在移动消息推送领域会有更多的贡献,在物联网领域,传感器与服务器的通信,信息的收集,MQTT都可以作为考虑的方案之一.在未来MQTT会进 ...

  9. 什么是MQTT协议?

    MQTT协议介绍 MQTT协议是什么? MQTT(Message Queuing Telemetry Transport Protocol)的全称是消息队列遥感传输协议的缩写,是一种基于轻量级代理的发 ...

随机推荐

  1. 最长上升子序列问题(O(n^2)算法)

    [题目描述] 给定N个数,求这N个数的最长上升子序列的长度. [样例输入] 7 2 5 3 4 1 7 6 [样例输出] 4 什么是最长上升子序列? 就是给你一个序列,请你在其中求出一段不断严格上升的 ...

  2. 关于pycharm使用sqlite数据可视化的使用

    如图

  3. Linux 网络配置及常用服务配置(Redhat 6)

    一.网络配置 1. VMWare 提供了三种网络工作模式供用户选择,他们分别是, ①Bridged(桥接模式): 如果网络中能提供多个IP地址,则使用桥接方式 ②NAT(网络地址转换模式): 如果网络 ...

  4. Unable to verify your data submission.加入了_csrf也报400错误的解决

    <input type="hidden" name="_csrf" value="<?=Yii::$app->request-> ...

  5. linux在命令符界面如何浏览网页

    1.介绍 w3m是个开放源代码的命令行下面的网页浏览器. 它支持表格.框架.SSL连线.颜色.如果是在适当的terminal上,甚至还支持"inline image". 这个软件通 ...

  6. str 操作方法

    # str 类,字符串 # name ='alex' # 首字母变大写 # test ='alex' # v= test.capitalize() # print(v) # # 大写全部变小写 # t ...

  7. (转)Rsync 排错案例解析

    Rsync 排错案例解析 原文:http://blog.51cto.com/irow10/1827306 错误一. 执行计划任务的备份脚本后没有看到备份的文件 1.首先查看crontab日志是否执行文 ...

  8. 手机web前端调试页面的几种方式

    前言 PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂.从模拟调试到远程调试,大概分为几部分: 1.Chrome DevTools(谷歌浏览器)的模拟手机调试 2.weinr ...

  9. wampserver启动时图标不变绿的解决方法

    有2种可能: 1.你安装wamp的时候安装路径中有中文,把路径全部改为英文. 2.其他软件占用了80端口号,解决方法是在服务中找微软的sql server或者其他服务,关掉服务后重启就行了.

  10. Mac 安装GTK

    Mac上配置GTK环境 安装command line工具, 如果安装了Xcode, 就直接跳过该步骤 安装Homebrew 使用brew install pkg-config 使用brew insta ...