EOS:dfuse stream 保证不会错过一个心跳

Posted handsomer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EOS:dfuse stream 保证不会错过一个心跳相关的知识,希望对你有一定的参考价值。

强大的 dfuse history API 给我们带来了高效的链数据获取途径,让我们的 dapp 在用户体验上了一个台阶。

官方示例

不会错过一个心跳

代码分析

函数

pendingActions 待处理的action。
ensureStream 返回steam实例。
commit 处理pendingActions中的action,并告诉dfuse server 当前处理的blockid,下次dfuse server推送的action就是基于你告诉dfuseserver的lastCommittedBlockNum,其中steam.mark()就是告诉dfuseserver的lastCommittedBlockNum的函数。

步骤

1.创建一个dfuse client
2.将Engine类托管dfuse client
3.调用streamActionTraces,接收ActionTraces流,于此同时接管dfuse的listening、action_trace、progress事件
4.当触发action_trace事件当时候,会调用commit方法(不会错过心跳在该方法里实现,请看函数里commit的解释),然后循环处理pendingActions中等待的action。等处理完之后,向pendingActions数组传入当前接收action,进入排队

总结

如果这个服务想要从头同步的话,我的理解应该是在listening事件的时候就告诉dfuseserver 当前同步的blockId,这样就会从你想要开始的地方推送数据流。

刚接触dfuse,如果有不对的地方请指出,谢谢。

相关资料

不会错过一个心跳
如何保证dfuse流持续连接
其他
Javascript例子
Javascript例子_live
Go例子
node.js例子
GraphQL API react demo
GraphQL API react live
查询语言规范
github
graphql编辑器和api文档浏览器_live

以上是关于EOS:dfuse stream 保证不会错过一个心跳的主要内容,如果未能解决你的问题,请参考以下文章

Java8 Stream流

合并多个相同的 Kafka Streams 主题

Streaming 102:批处理之外的流式世界第二部分

Streaming 102:批处理之外的流式世界第二部分

带有Sparking Streaming的订单保证

Spark Streaming使用Kafka保证数据零丢失