惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
IT之家
IT之家
Google DeepMind News
Google DeepMind News
罗磊的独立博客
爱范儿
爱范儿
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
U
Unit 42
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
B
Blog
博客园 - 叶小钗
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟
Snap! 使用笔记: MQTT 插件
种瓜 · 2023-02-22 · via 夜行人

文章目录

前言

本文是在 Snap! 中使用 MQTT 插件的笔记。

对 Snap! 不了解的读者,推荐 @angilent 的图形编程工具 Snap! 初探

Snap! 内置了 MQTT 插件:

有了 MQTT 插件,我们就可以在 Snap! 与其他平台之间传递消息。

一旦能够在对象之间异步(pub/sub)传递消息,几乎就可以做任何事情

消息:应将计算视为对象的固有功能,可以通过发送消息统一调用它们。 – Smalltalk背后的设计原则

如何使用

最简单的方式是从这个例子开始。

我将其视为在 Snap! 中使用 MQTT 插件的最佳实践。

注意事项

其中有两处值得注意:

MQTT connect 积木下拉菜单里内置了四个 MQTT broker。如果你使用自己的 MQTT broker (比如我的例子), 你需要自己填入 MQTT broker 的 url。具体规则可以右键积木, 查看帮助(帮助里也解释了 options, 第一个参数是用户名,第二个参数是密码…)。 如果你使用自己的 broker ,要确保它支持 wss 连接。

MQTT subscribe 积木中, on each message run 后边的参数是积木(作为回调函数),每当收到相关主题的消息,就执行这些积木参数。回调函数会传入两个参数(按顺序), 第一个参数是 payload, 第二个参数是 topic 。 我使用 broadcast 作为通用的回调函数,它负责将消息广播出去,然后由事件积木处理,这样的好处是,可以动态地决定如何处理 MQTT 消息,而不必直接修改 subscribe 回调函数(多次订阅会导致累积,除非重新 connect)。

从这个例子开始Snap! 的 MQTT 之旅,或许是不错的选择。

更多 MQTT 插件的使用方法,可以查看 MQTT 插件最后一个积木(MQTT Extension Examples)的定义。

进阶: client-server 模式

MQTT 协议围绕 pub/sub 构建, 是一种异步消息系统, 有时候我们想要同步的 client-server 模式(HTTP 就采用了 client-server 模式): 你希望发送一个请求,然后得到这个请求被处理的结果(request-response)。

基于 pub/sub 可以构建出 client-server 消息模式。 Snap! 的 MQTT 插件内置了实现 client-server 的积木。这并不是 MQTT 协议的内置模式,所以它无法与其他 MQTT 客户端协作,只能在不同的 Snap! 页面之间协作。

如果你想基于 MQTT 构建更为通用的 client-server 系统。 可以尝试 Dynatalk, 它构建在 MQTT 之上, 但支持 client-server 模式.