2

Snap! 使用笔记: MQTT 插件

 1 year ago
source link: http://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/snap-mqtt/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

Snap! 的 MQTT 插件

Snap! 内置了 MQTT 插件:

Snap-mqtt-01.png

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

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

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

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

snap_mqtt_demo-01.png

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

其中有两处值得注意:

snap_mqtt_demo-02.png

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

snap_mqtt_demo-03.png

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 系统。可以查看这些积木的实现方式,弄懂原理后在其他 MQTT client 里(诸如 Python paho-mqtt)实现相应机制。

你也可以自行实现,原理可以参考我之前的这篇文章: 建立在异步消息之上的同步指令: 分别在JavaScript、Python、Squeak上实现


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK