众筹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)
    }
}

}

相关文章
|
10天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
106 18
|
13天前
|
前端开发 算法 安全
一站式搭建相亲交友APP丨交友系统源码丨语音视频聊天社交软件平台系统丨开发流程步骤
本文详细介绍了一站式搭建相亲交友APP的开发流程,涵盖需求分析、技术选型、系统设计、编码实现、测试、部署上线及后期维护等环节。通过市场调研明确平台定位与功能需求,选择适合的技术栈(如React、Node.js、MySQL等),设计系统架构和数据库结构,开发核心功能如用户注册、匹配算法、音视频聊天等,并进行严格的测试和优化,确保系统的稳定性和安全性。最终,通过云服务部署上线,并持续维护和迭代,提供一个功能完善、安全可靠的社交平台。
80 6
|
17天前
|
移动开发 小程序 前端开发
使用php开发圈子系统特点,如何获取圈子系统源码,社交圈子运营以及圈子系统的功能特点,圈子系统,允许二开,免费源码,APP 小程序 H5
开发一个圈子系统(也称为社交网络或社群系统)可以是一个复杂但非常有趣的项目。以下是一些关键特点和步骤,帮助你理解如何开发、获取源码以及运营一个圈子系统。
91 3
|
14天前
|
前端开发 搜索推荐 PHP
大开眼界!uniapp秀操作,陪玩系统新功能,陪玩app源码,可实时互动随心优化!
多客游戏陪玩系统采用前端uniapp与PHP语言,实现全开源、易改造,RTC传输协议确保低延迟语音连麦,分布式部署应对高并发。功能创新包括游戏约单、多人语音聊天室、动态广场、私信聊天等,提供高端社交和个性化服务,满足各类需求,让玩家畅享游戏乐趣。
|
3月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
835 1
|
6天前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
25 5
|
5天前
|
移动开发 安全 搜索推荐
圈子社交系统APP,同城本地圈子论坛开发,让身边的人沟通更加紧密
圈子社交系统APP是一款基于社交网络的移动应用,用户可创建、加入和管理兴趣圈子。主要功能包括:动态分享与交流、实时聊天、会员体系与身份认证、活动策划等。该APP注重个性化定制、社交关系深化、隐私安全及跨平台互联,提供丰富的社交体验。
|
9天前
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
18 1
|
17天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
77 11
|
15天前
|
前端开发 数据库 UED
uniapp开发,前后端分离的陪玩系统优势,陪玩app功能特点,线上聊天线下陪玩,只要4800
前后端分离的陪玩系统将前端(用户界面)和后端(服务器逻辑)分开开发,前者负责页面渲染与用户交互,后者处理数据并提供接口。该架构提高开发效率、优化用户体验、增强可扩展性和稳定性,降低维护成本,提升安全性。玩家可发布陪玩需求,陪玩人员发布服务信息,支持在线聊天、预约及线下陪玩功能,满足多样化需求。[演示链接](https://www.51duoke.cn/games/?id=7)
下一篇
开通oss服务