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
(在所有文件中),则消息将写入闪存,并且重置设备不会丢失任何数据。
如 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
(在所有文件中),则消息将写入闪存,并且重置设备不会丢失任何数据。