Skip to content

Eventbus需求 #158

@zhangfisher

Description

@zhangfisher

malagu应该内置一个Eventbus作为基础能力,用来为模块与模块之间的提供一种高效、易用的通讯机制,帮助模块与模块之间实现松耦合。

@malgu@eventbus应该具备以下能力:

  • 发布订阅功能
    模块可以按需要订阅框架或者其他模块的发布的消息

  • 全局消息广播

  • 点对点通讯

主要特性应该包括:

  • 模块寻址

在总线内部,每一个模块均需要具备一个地址标识,可以是模块id之类,只需要全局唯一即可。
模块地址应作为模块通讯的

  • 具备一定描述能力的消息格式
interface Message{
   id:number;                    // 可以是自增值,由框架产生
   from:string;                  // 消息发送者
   to?:string;                     // 消息接收者,仅在点对点时有用
  sid?:number
   meta:{              
        forwards:number
        [key:string]: string | number | booean
    }
    payload:any             // 消息负载
}

meta供应用层扩展提供一些额外的数据,特别有用。比如MQTT模块可以在meta中提供一些topic数据;TCP模块可以提供ip地址之类的。

forwards用来记录消息在总线内部流转的次数,当经总线转发一次就+1,总线可以设定一个最大forwards值,用来用来防止消息回路时使用。

sid用来供模块之间进行会话时标识消息使用,当模块与模块之间需要进行多次通讯时有用

  • 层次主题

总线发布的消息主题应支持层次结构,例a/b/c之类的,最好支持通配符。

  • 前端订阅

前端也可以向后端订阅?

  • 框架生命周期事件
    框架、组件、模块在其生命周期内也发布一些事件供应用层订阅
    一些重要的事件甚至可以广播

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions