美文网首页
go-ethereum事件机制设计与实现

go-ethereum事件机制设计与实现

作者: 黄河之江水 | 来源:发表于2018-01-22 22:45 被阅读0次

总体介绍

以太坊内部有大量协程,协程间的调度驱动通过事件机制来完成;具体实现使用
golang的chan机制。主要方案有以下两种。

1.使用观察者模式实现“事件”转发

Feed 类为 observer
  • Subscribe()方法, 客户端调用
    开始订阅‘事件’,把客户端的 接收channel 添加到 Feed;同时返回feedSub对象

  • feedSub.Unsubscribe()方法 ,客户端调用
    客户端通过调用此方法取消订阅

  • Send(value interface{})方法, Feed(observer) 拥有者调用
    通过此方法向所有订阅者发布‘事件’

使用go的chan机制实现通信
  • 订阅者把自己的 接收 chan 添加到 Feed(observer)
  • Send发布消息时的输入参数也是一个 chan
具体使用示例
1)BlockChain类作为 Feed(observer) 拥有者
  • 拥有下面几个 Feed成员
    rmLogsFeed event.Feed
    chainFeed event.Feed
    chainSideFeed event.Feed
    chainHeadFeed event.Feed
    logsFeed event.Feed
  • 封装了下面几个订阅函数
    SubscribeRemovedLogsEvent
    SubscribeChainEvent
    SubscribeChainHeadEvent
    ...
  • 发布消息时调用 bc.xxxxFeed.Send(ev)
2) TestTransactionGapFilling 作为客户端
  • 下行代码定义了事件接收 chan
    events := make(chan TxPreEvent, testTxPoolConfig.AccountQueue+5)
  • 下行代码订阅了tx_pool的事件
    sub := pool.txFeed.Subscribe(events)
  • 通过上面的events接收处理事件

2.全局双工事件通道,根据事件类型订阅和转发

TypeMux 类为observer
  • Subscribe()方法, 注册者调用
    参数为要接收的‘事件类型’, 返回TypeMuxSubscription对象
  • Post()方法, 注册者调用
    发送消息,具体实现调用TypeMuxSubscription.deliver()
  • TypeMuxSubscription. Unsubscribe()方法, 注册者调用
    取消订阅
  • TypeMuxSubscription.deliver()方法 ,无外部调用
    注册者发送消息的具体实现,
  • TypeMuxSubscription.Chan()方法, 注册者调用
    接收事件
以太坊具体使用
  • Ethereum中创建一次,其他地方多次使用 ,全局只有一个对象。

  • Subscribe()和Post()方法在代码中有多次调用,执行对象都来自Ethereum.eventMux指向的对象

相关文章

  • go-ethereum事件机制设计与实现

    总体介绍 以太坊内部有大量协程,协程间的调度驱动通过事件机制来完成;具体实现使用golang的chan机制。主要方...

  • RTOS(事件标志组)

    事件标志组的原理与创建 问题概述 设计原理 设计实现 事件标志组的等待与通知 设计需求 设计原理 设计实现 事件标...

  • 以太坊源码目录结构

    如果要了解go-ethereum项目的实现与机制,需要深入研究项目的源码,本文先就以太坊的目录进行整理说明,对于官...

  • RTOS基础(事件控制块实现)

    时间控制块的原理与创建 问题概述 解决方案 事件控制块原理 设计实现 事件的等待与通知 概述 设计原理 设计实现 ...

  • Spring 内置事件

    ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和App...

  • 对Binder通信机制的强行理解

    参考:Android Bander设计与实现 - 设计篇 Binder学习指南 github_Binder机制...

  • ethereum中go-event库的使用

    github.com/ethereum/go-ethereum/event包实现了一个事件发布订阅的库,使用接口主...

  • redis事务以及watch的理解

    事务的特性 实现的机制 WATCH 原理 [参考自redis设计与实现:第19章 事务]

  • 在Spring中使用事件机制

    在Spring中使用事件机制 1. 事件机制 事件机制的底层设计模式是观察者模式,观察者设计模式定义了对象间的一种...

  • android核心知识点学习资料

    Binder学习指南 Android Bander设计与实现 - 设计篇 Android进程间通信(IPC)机制B...

网友评论

      本文标题:go-ethereum事件机制设计与实现

      本文链接:https://www.haomeiwen.com/subject/qrmkoxtx.html