众筹DAPP开发,众筹系统开发(逻辑及方案),众筹app源码模式

简介: 同步模块的消息handler 负责处理从 net 模块监听到的 NetMsg_SYNC_BLOCK_MSG 类型的消息func (sync *BlockChainSyncServer) blockSyncMsgHandler(from string, msg []byte, msgType netPb.NetMsg_MsgType) error {

同步服务模块 handler
同步模块的消息handler 负责处理从 net 模块监听到的 NetMsg_SYNC_BLOCK_MSG 类型的消息
func (sync *BlockChainSyncServer) blockSyncMsgHandler(from string, msg []byte, msgType netPb.NetMsg_MsgType) error {

// 检查服务是否启动
check sync.start

// 检查消息类型
check msgType != netPb.NetMsg_SYNC_BLOCK_MSG

// 解析 msg
unmarshal msg -> syncMsg

switch syncMsg.Type {
case syncPb.SyncMsg_NODE_STATUS_REQ:
    // 返回本地高度
    return sync.handleNodeStatusReq(from)
case syncPb.SyncMsg_NODE_STATUS_RESP:
    // 在定时器任务队列中添加 NodeStatusMsg 任务,启动处理流程
    return sync.handleNodeStatusResp(&syncMsg, from) 
case syncPb.SyncMsg_BLOCK_SYNC_REQ:
    // 返回区块数据(封装在 SyncMsg 中,包含相应的业务数据)
    return sync.handleBlockReq(&syncMsg, from) 
case syncPb.SyncMsg_BLOCK_SYNC_RESP:
    // 在定时器任务队列中添加 SyncedBlockMsg 任务,启动处理流程
    return sync.scheduler.addTask(&SyncedBlockMsg{msg: syncMsg.Payload, from: from}) 
}

}
7.2.2.3. 调度服务 handler
func (sch *scheduler) handler(event queue.Item) (queue.Item, error) {

switch msg := event.(type) {
case NodeStatusMsg:
    // NodeStatusMsg任务流
    // 更新 peers 中记录的节点ID和高度,更新 blockStates 初始化为 newBlock
    sch.handleNodeStatus(msg)
case LivenessMsg:
    // pending 状态区块超时检查
    sch.handleLivinessMsg()
case SchedulerMsg:
    // 发送 SyncMsg_BLOCK_SYNC_REQ 请求到远端
    return sch.handleScheduleMsg()
case *SyncedBlockMsg:
    // ReceivedBlocks任务流
    // 更新高度对应区块状态为 receivedBlock,封装 ReceivedBlocks 数据提交给 processor 消息队列,由 handleReceivedBlocks 函数处理
    return sch.handleSyncedBlockMsg(msg)
case ProcessedBlockResp:
    // 处理 processor 消息队列提交的 ProcessedBlockResp 消息,检查本地区块写入结果,更新 pendingRecvHeight
    return sch.handleProcessedBlockResp(msg)
case DataDetection:
    // 检查 blockStates 数据,删除低于本地最高快的缓存数据
    sch.handleDataDetection()
}

}
处理服务 handler
func (pro *processor) handler(event queue.Item) (queue.Item, error) {

switch msg := event.(type) {
case *ReceivedBlocks:
    // 将区块数据写入 processor.queue 队列
    pro.handleReceivedBlocks(msg)
case ProcessBlockMsg:
    // ProcessBlockMsg 工作流
    // 从 processor.queue 中取出 pendingBlockHeight 块高的数据,
    // 调用 validateAndCommitBlock 写入本地账本,封装 ProcessedBlockResp 消息返回
    return pro.handleProcessBlockMsg()
case DataDetection:
    // 检查 processor.queue,删除低块
    pro.handleDataDetection()
}

}
定时任务的独立线程
func (sync *BlockChainSyncServer) loop() {

var (
    // 定时任务:触发区块处理工作流
    doProcessBlockTk = time.NewTicker(sync.conf.processBlockTick)
    // 定时任务: 触发远端状态查询工作流
    doScheduleTk = time.NewTicker(sync.conf.schedulerTick)
    // 定时任务: 广播高度查询消息
    doNodeStatusTk = time.NewTicker(sync.conf.nodeStatusTick)
    // 定时任务: 触发查询请求超时校验逻辑
    doLivenessTk = time.NewTicker(sync.conf.livenessTick)
    // 定时任务: 触发定时器调度服务中本地区块状态字典的高度检查,舍弃低于本地最高快的 kv 对
    doDataDetect = time.NewTicker(sync.conf.dataDetectionTick)
)

for {
    select {
    case <-sync.close:
        return

        // Timing task
    case <-doProcessBlockTk.C:
        sync.processor.addTask(ProcessBlockMsg{})
    case <-doScheduleTk.C:
        sync.scheduler.addTask(SchedulerMsg{})
    case <-doLivenessTk.C:
        sync.scheduler.addTask(LivenessMsg{})
    case <-doNodeStatusTk.C:
        sync.broadcastMsg(syncPb.SyncMsg_NODE_STATUS_REQ, nil)
    case <-doDataDetect.C:
        sync.processor.addTask(DataDetection{})
        sync.scheduler.addTask(DataDetection{})

    // 消息中转和消费逻辑
    case resp := <-sync.scheduler.out:
        sync.processor.addTask(resp)
    case resp := <-sync.processor.out:
        sync.scheduler.addTask(resp)
    }
}

}

相关文章
|
2月前
|
存储 安全 算法
什么是秒合约?竞猜游戏交易所app系统开发规则介绍
秒合约是一种基于区块链技术的超短期衍生品合约,交易周期以秒为单位。它通过智能合约实现交易的自动化和去信任化,优化执行流程,提高交易速度和效率。秒合约适合高风险投机者,收益和风险固定,不使用杠杆。此外,竞猜游戏交易所app系统也涉及快速交易和投机,需确保安全、稳定及合规运营。
|
2月前
|
机器学习/深度学习 监控 安全
量化合约对冲策略交易app系统开发技术规则
量化合约对冲策略交易APP系统开发技术规则涵盖系统架构设计、量化策略实现、交易管理、风险管理、用户界面设计及性能优化等方面。通过模块化设计、分布式架构、数据持久化、策略开发、算法交易、回测优化、订单管理、持仓监控、资金安全、风险控制、实时监控、安全审计、界面设计、反馈机制、多语言支持、响应速度、资源优化和兼容性等措施,确保系统的稳定、安全、高效和易用。
|
3月前
|
前端开发 API Android开发
10 大 APP 开发方案比较
本文首发于微信公众号“前端徐徐”,深入剖析了当前最受欢迎的十种APP开发方案,包括传统的iOS和Android开发、跨平台的React Native和Flutter、现代化的CapacitorJS和PWA等,旨在帮助开发者在众多选择中找到最适合的开发路径。通过详细分析每种方案的优缺点及适用场景,文章提供了详尽的比较和实用建议,助力高效、优质的APP开发。
411 0
10 大 APP 开发方案比较
|
4月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
118 12
|
5月前
|
消息中间件 Java
【实战揭秘】如何运用Java发布-订阅模式,打造高效响应式天气预报App?
【8月更文挑战第30天】发布-订阅模式是一种消息通信模型,发送者将消息发布到公共队列,接收者自行订阅并处理。此模式降低了对象间的耦合度,使系统更灵活、可扩展。例如,在天气预报应用中,`WeatherEventPublisher` 类作为发布者收集天气数据并通知订阅者(如 `TemperatureDisplay` 和 `HumidityDisplay`),实现组件间的解耦和动态更新。这种方式适用于事件驱动的应用,提高了系统的扩展性和可维护性。
86 2
|
5月前
|
Docker 容器
【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案
【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案
|
5月前
|
开发工具 git
【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?
【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?
|
6月前
|
存储 前端开发 测试技术
同城交友APP系统开发运营版/案例详细/功能步骤/逻辑方案
开发一款同城交友APP系统需要经过以下大致流程:
|
10天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
111 18
|
6天前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
25 5

热门文章

最新文章

下一篇
开通oss服务