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

推荐订阅源

V
Visual Studio Blog
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
L
LangChain Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
Y
Y Combinator Blog
月光博客
月光博客
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
A
About on SuperTechFans
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
小众软件
小众软件
H
Help Net Security
Last Week in AI
Last Week in AI
B
Blog RSS Feed
宝玉的分享
宝玉的分享
N
Netflix TechBlog - Medium
博客园 - 叶小钗
The GitHub Blog
The GitHub 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 美国之行 三门问题的程序模拟
codelab-adapter与应答模式
种瓜 · 2019-02-07 · via 夜行人

文章目录

架构图中可以看出codelab-adapter中的消息是异步的,无论是websocket还是ZeroMQ pub/sub,都是异步的。

有开发者希望codelab-adapter能支持应答模式: client(Scratch3.0/Blockly)发出request message,server回应reply message. 应答模式的逻辑由下图展现:

应答模式在积木块上的表现

使用应答模式的积木块,表现为运行的积木块,往codelab-adapter发出request message之后进入阻塞状态,直到codelab-adapter返回reply message,得到结果之后,才继续往下运行。

应答模式的应用场景

应答模式有很多应用场景,web开发者对http很熟悉,http便是典型的应答模式,想想你能用http做的事,便知道哪些事情适合用应答模式来做。

接触过ROS的开发者, 对异步消息和应答模式的使用场景应该很熟悉。ROS的核心便是消息系统。

我们举个具体例子,它来自codelab-adapter开发者的真实应用场景。 他需要一个REPORTER类型的积木块,该积木块的功能是获取电位计的值。

当然对于这个需求,我们可能会建议采用这种模式:源源不断发送电位计的值到scratch3.0中,诸如我们在extension_microbit采用的策略。但对于一些传感器或固件(如Firmata),采用同步模式可能是更经济简易的做法。

基于异步消息实现

由于异步消息是codelab-adapter基础架构的一部分,所以我们准备采用异步消息来实现应答模式。

我们写个简单的例子,来展示如何使用应答模式,积木块发出消息后,codelab-adapter的req-rep插件将消息反转,休眠1秒,再返回反转后的消息,以下是相应的源代码.

scratch3_req_rep

Scratch3.0中的插件源码见: scratch3_req_rep

核心是利用promise。在消息层面,为每条消息添加messageID.

extension_req_rep

codelab-adapter插件源码见: extension_req_rep

参考