当前位置: 首页 > 知识库问答 >
问题:

node.js MQTT代理

聂奇
2023-03-14

谢谢

var mqtt = require('mqtt')
var MQTT_TOPIC = "homeGet/light";
var MQTT_ADDR = "mqtt://broker.example.org:80";
var MQTT_PORT = 80;
var client  = mqtt.connect(MQTT_ADDR,{clientId: "webClient", keeplive: 1, clean: false, debug:true});

var express = require('express');
var socket = require('socket.io');

//store the express functions to var app
var app = express();

//Create a server on localhost:5000
var server = app.listen(process.env.PORT || 5000);

//var server = app.listen((process.env.PORT || 3000, function(){
  //console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env);
//});
//host content as static on public
app.use(express.static('public'));

console.log("Node is running on port 5000...");

//MQTT
client.on('connect', function () {
    client.subscribe(MQTT_TOPIC, { qos: 2 });
    client.publish(MQTT_TOPIC, '1000');
});
client.on('message', function (topic, message) {
    // message is Buffer
    console.log(message.toString());
    client.end();
});
client.on('error', function(){
    console.log("ERROR")
    client.end()
})
client.on('offline', function() {
    console.log("offline");
});
client.on('reconnect', function() {
    console.log("reconnect");
});

共有1个答案

戎泰
2023-03-14

您的client.on('message',function(message){...})回调函数中有client.end()

这将在客户端收到第一条消息后立即断开它的连接。

假设您是从NPM上的mqtt包的readme.md中的示例中复制的。该示例专门设置为只接收一条消息。

 类似资料:
  • 问题 你构建了一个自定义容器对象,里面包含有列表、元组或其他可迭代对象。 你想直接在你的这个新容器对象上执行迭代操作。 解决方案 实际上你只需要定义一个 __iter__() 方法,将迭代操作代理到容器内部的对象上去。比如: class Node: def __init__(self, value): self._value = value self._ch

  • 代理用于帮助云联壹云平台访问由于网络或其它问题无法直接访问的云平台。 代理用于帮助 云联壹云 平台访问由于网络或其它问题无法直接访问的云平台。 使用场景: Google Cloud需要设置代理才能访问; 天翼云需要提前把访问的公网IP加入白名单才可以直接访问。 其他情况,如 云联壹云 部署在内网环境,需要通过代理访问外网的公有云平台等。 代理使用规则: 当云账号不设置代理时,代表直连网络; 当请求

  • 代理 本节也将像上一节关于领域一样亲自动手。 我们的最终目标是与本章开头两个组织之间的协议中所示的类似设置。 这意味着您将需要两台FreeRADIUS服务器。 我们假设两者都有默认安装。

  • 我的代码运行在具有单独JVM的单独虚拟机上。我想在此虚拟机上以tcpserver模式设置JaCoCo代理以收集覆盖率数据。然后,我将在我的maven项目中以tcpclient模式设置JaCoCo代理,以连接到上面提到的VM并获取覆盖率数据。 问题是代理不收集任何覆盖数据。在中创建了覆盖率数据文件,但该文件为空。 下面是代理选项:-Java agent:/usr/xx/plugins/org . j

  • 本文向大家介绍浅谈Java代理(jdk静态代理、动态代理和cglib动态代理),包括了浅谈Java代理(jdk静态代理、动态代理和cglib动态代理)的使用技巧和注意事项,需要的朋友参考一下 一、代理是Java常用的设计模式,代理类通过调用被代理类的相关方法,并对相关方法进行增强。加入一些非业务性代码,比如事务、日志、报警发邮件等操作。 二、jdk静态代理 1、业务接口 2、业务实现类 3、代理类

  • 太感谢你了,Pouya

  • 代理 proxy 创建一个继承了指定类并且/或者实现了0个或者多个接口的类的对象。这对于创建那种必须要实现某个接口才能得到通知的listener对象很有用。举一个例子, 大家可以看下面 “Desktop Applications” 那一节的例子。那里我们创建了一个继承JFrame类并且实现ActionListener接口的类的对象。

  • map $sent_http_content_type $expires { "text/html" epoch; "text/html; charset=utf-8" epoch; default off; } server { listen 80;