pubsub 中的设备和设备内存有什么区别?

What's the difference between device and device-memory in pubsub?

如 pub-sub 的 toit 标准库文档中所写(请参阅 https://libs.toit.io/pubsub/library-summary),有两个设备主题。其中一个是device:*,另一个是device-memory:*

我找不到任何解释有什么区别...有什么想法吗?

谢谢!

device-memory 版本不将对象存储在闪存中。因此它效率更高,但如果在订阅有机会读取数据之前关闭设备电源,它可能会丢失数据。

例如:

// ---------- publish.toit -----------
import pubsub
main: pubsub.publish "device-memory:test" "test $Time.now"

// ---------- subscribe.toit ----------
import pubsub
main:
  print "running"
  sleep --ms=3_000
  pubsub.subscribe TOPIC:  | msg |
    print "received message: $msg.payload.to_string"

// ---------- publish.yaml ----------
name: device publisher
entrypoint: publish.toit
triggers:
  on_boot: true

// ---------- subscribe.yaml ----------
name: device subscriber
entrypoint: subscribe.toit
triggers:
  on_boot: true

pubsub:
  subscriptions:
  - "device-memory:test"

如果您安装这些程序并重置设备,您应该会在日志中看到以下输出:

received message: test 2022-05-17T09:35:30Z    11:35:33    message
0                                              11:35:30    process stop
running                                        11:35:30    message
                                               11:35:30    process start
                                               11:35:30    process start

现在,如果您在看到“运行”后立即重置设备,但在接收方有机会实际获取数据之前,则发布的消息将丢失。

但是,如果您将主题切换到 device:test(在所有文件中),则消息将写入闪存,并且重置设备不会丢失任何数据。