golang mqtt 发布和订阅

2024-01-02

有谁知道我可以在哪里获得一些在无限循环中发布和订阅的示例 MQTT 客户端 Go (golang) 代码?

我正在与在 MacO 上运行的 Mosquitto 代理进行消息传递。

更详细地...

  1. 从网络获取消息(主题)
  2. 根据该消息计算一些内容
  3. 将计算结果发送回网络(主题)

这是我正在使用的代码:

package main

import (
"fmt"
 MQTT "github.com/eclipse/paho.mqtt.golang"
"os"
"time"
)

var knt int

var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) 
{ 
   fmt.Printf("MSG: %s\n", msg.Payload())
   text:= fmt.Sprintf("this is result msg #%d!", knt)
   knt++
   token := client.Publish("nn/result", 0, false, text)
   token.Wait()
}

func main() {
   knt = 0

   opts := MQTT.NewClientOptions().AddBroker("tcp://localhost:1883")
   opts.SetClientID("mac-go")
   opts.SetDefaultPublishHandler(f)

   c := MQTT.NewClient(opts)
   if token := c.Connect(); token.Wait() && token.Error() != nil {
        panic(token.Error())
   }

  if token := c.Subscribe("nn/sensors", 0, nil); token.Wait() && 
     token.Error() != nil {
     fmt.Println(token.Error())
     os.Exit(1)
  }

  time.Sleep(3 * time.Second)
} //end of main

我查看了 GoDocs,寻找一些有关如何保持连接打开的提示,但似乎没有任何相关的内容。我当然可以无限循环 超过“订阅”,但这似乎效率低下。


我查看了 GoDocs,寻找一些有关如何保持连接打开的提示,但似乎没有任何相关的内容。我当然可以对“订阅”进行无限循环,但这似乎效率低下。

好的。在 找到了解决方案。https://github.com/eclipse/paho.mqtt.golang/blob/master/cmd/stdoutsub/main.go https://github.com/eclipse/paho.mqtt.golang/blob/master/cmd/stdoutsub/main.go。 本质上,我必须打开一个订阅频道。 这是新代码:

package main

import (
    "fmt"
    MQTT "github.com/eclipse/paho.mqtt.golang"
    "os"
    "os/signal"
    "syscall"
)

var knt int
var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {
    fmt.Printf("MSG: %s\n", msg.Payload())
    text := fmt.Sprintf("this is result msg #%d!", knt)
    knt++
    token := client.Publish("nn/result", 0, false, text)
    token.Wait()
}

func main() {
    knt = 0
    c := make(chan os.Signal, 1)
    signal.Notify(c, os.Interrupt, syscall.SIGTERM)

    opts := MQTT.NewClientOptions().AddBroker("tcp://localhost:1883")
    opts.SetClientID("mac-go")
    opts.SetDefaultPublishHandler(f)
    topic := "nn/sensors"

    opts.OnConnect = func(c MQTT.Client) {
            if token := c.Subscribe(topic, 0, f); token.Wait() && token.Error() != nil {
                    panic(token.Error())
            }
    }
    client := MQTT.NewClient(opts)
    if token := client.Connect(); token.Wait() && token.Error() != nil {
            panic(token.Error())
    } else {
            fmt.Printf("Connected to server\n")
    }
    <-c
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

golang mqtt 发布和订阅 的相关文章

随机推荐

  • 使用“location.href”取消页面卸载时出现“未知异常”

    我使用以下代码捕获 window onbeforeunload 事件 window onbeforeunload function evt if checkIsDirty var message If you continue your c
  • 通过单击按钮增加条形图值

    我正在尝试创建一个图表来显示锻炼的进度 每点击五个按钮就应在图表中添加一个勾号 这是其外观的示例 出于演示目的 我使用按钮单击 在生产中 轮子每转二十圈就会单击一次 private int counter 0 private void bu
  • Java中ArrayList的问题

    我在正确添加 ArrayList 时遇到问题 当我在 for 循环完成后打印 ArrayList 时 ArrayList 的长度是正确的 但每个元素都是相同的 创建的最后一个坐标 有人可以修复 并解释 下面的代码吗 public class
  • Python 中连续数据的箱线图

    我有一个包含 2 列的 csv 文件 col1 Timestamp数据 yyyy mm dd hh mm ss ms 8 个月数据 col2 热量数据 连续变量 由于有近 50k 记录 我想将 col1 timestamp col 划分为数
  • 如何从使用 writeToFile 创建的文件加载 NSDictionary?

    我有一个 NSMutableDictionary 我使用它编写的 stuff writeToFile TEST atomically YES 日后如何找回 另外 如果我决定用 4S 替换 iPhone 4 会发生什么情况 我的书面数据可以转
  • 用于监控/调整 memcached 运行状况的有用提示/工具有哪些?

    昨天 我发现了这个很酷的脚本 内存缓存顶部 https code google com p memcache top 它很好地打印出 memcached 的实时统计信息 看起来像 memcache top v0 6 default port
  • 将派生类强制转换为基类

    这里发生什么类型的演员表 在B get class A public A a 0 int a class B public A public A get return this is this C style cast int main B
  • 使用不透明类型(Char 和 Long)

    我正在尝试导出算法的 Scala 实现以在 JavaScript 中使用 我在用着 JSExport 该算法适用于 ScalaChar and Long值被标记为opaque in the 互操作性指南 http www scala js
  • 我如何在 xcode 中获取数组?

    如何获取字典的值而不是循环 我知道如何使用以下方法获取单个值 NSString valueStr dict objectForKey Key2 我需要通过循环所有键来获取 我需要在字典中搜索一个值 因为看起来您正在尝试使用NS词典 http
  • 迁移合约时耗尽 Gas

    我看过其他 没油了 的帖子 但他们没有解决我的问题 我正在使用 ganache cli 开始 ganache cli account 0xce2ddf7d4509856c2b7256d002c004db6e34eeb19b37cee04f7
  • 如何确定实体框架是否正在等待连接池中的连接?

    我看到一些间歇性的速度减慢 sql 超时错误 我无法确定原因 我已经拼凑了一些线索 但我需要一些帮助来确定可能的后续步骤 问题 我们有一个表 其中包含 10 多万条记录 我们从 Web 应用程序运行异步计数 该表经常被写入 有时计数需要 2
  • 安装svn:重启apache后出错

    我这样创建了我的存储库 须藤 svnadmin 创建 svn 重新启动 apache 后出现此错误 第 16 行语法错误 etc apache2 mods enabled dav svn conf 这里不允许 DAV dav svn con
  • 我尝试从此 HTML 中提取价格 2 890 000K 和 地址 有 12 个相同的 div class list items content list items content 1 div class list items conten
  • 如何使 Ember.js 与 Grails 控制器名称配合?

    Grails 非常强大 可以让您使用一条语句将 Domain 对象转换为 JSON object as JSON 不幸的是 由于一些原因 这不足以与 Ember js 交互 如何让 Grails 与 Ember js 完美配合 好问题 自我
  • 像 epub/ebook 一样显示动态 html 内容,而不将 html 转换为 epub 格式?

    我想创建一个响应式 移动优化的阅读体验 类似于 epub 电子书阅读器 如 Kindle 应用程序或 iBooks 使用动态 html 作为源 想象一下一篇长文章或博客文章需要大量垂直滚动才能阅读 尤其是在小型移动设备上 我想做的是将长页面
  • seaborn clustermap:subplots_adjust 取消颜色条重新定位

    我正在尝试使用seaborn制作侧面带有颜色条的热图 但是 在我的实际应用程序案例中 我有很长的列名称需要轮换 这需要使用plt subplots adjust 否则标签不适合图像 plt setp g ax heatmap get xti
  • Netbeans“未执行任何测试”

    我有一个包含单元测试的 php 项目 我使用 Netbeans 进行开发 并希望在我的 IDE 中集成 phpunit 如果我从命令行运行 phpunit 它就可以工作 如果我按 Alt F6 在 Netbeans 中运行测试 则不会运行任
  • 在 Python 中转义 JavaScript 字符串

    我有一个 Python 脚本 它构建一些 JavaScript 以 JSON 信封的形式发送到浏览器 我想转义 JavaScript 字符串并用单引号分隔它们 我不能使用json dumps因为它使用双引号作为分隔符 就像 JSON 规范所
  • 如何通过 ajax 刷新由 JSF 填充的 javascript 变量?

    我想做以下事情 从其中选择一个项目h selectOneMenu 通过 ajax 使用新值更新支持 bean 使用新值运行 Javascript 函数 但在下面的代码中 alert backingBean derivedValue 仍然包含
  • golang mqtt 发布和订阅

    有谁知道我可以在哪里获得一些在无限循环中发布和订阅的示例 MQTT 客户端 Go golang 代码 我正在与在 MacO 上运行的 Mosquitto 代理进行消息传递 更详细地 从网络获取消息 主题 根据该消息计算一些内容 将计算结果发