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

}

相关文章
|
9天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
96 18
|
5天前
|
JSON 供应链 搜索推荐
淘宝APP分类API接口:开发、运用与收益全解析
淘宝APP作为国内领先的购物平台,拥有丰富的商品资源和庞大的用户群体。分类API接口是实现商品分类管理、查询及个性化推荐的关键工具。通过开发和使用该接口,商家可以构建分类树、进行商品查询与搜索、提供个性化推荐,从而提高销售额、增加商品曝光、提升用户体验并降低运营成本。此外,它还能帮助拓展业务范围,满足用户的多样化需求,推动电商业务的发展和创新。
22 5
|
5天前
|
移动开发 安全 搜索推荐
圈子社交系统APP,同城本地圈子论坛开发,让身边的人沟通更加紧密
圈子社交系统APP是一款基于社交网络的移动应用,用户可创建、加入和管理兴趣圈子。主要功能包括:动态分享与交流、实时聊天、会员体系与身份认证、活动策划等。该APP注重个性化定制、社交关系深化、隐私安全及跨平台互联,提供丰富的社交体验。
|
8天前
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
鸿蒙语言开发 几十套鸿蒙ArkTs app毕业设计及课程作业
17 1
|
17天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
76 11
|
14天前
|
前端开发 数据库 UED
uniapp开发,前后端分离的陪玩系统优势,陪玩app功能特点,线上聊天线下陪玩,只要4800
前后端分离的陪玩系统将前端(用户界面)和后端(服务器逻辑)分开开发,前者负责页面渲染与用户交互,后者处理数据并提供接口。该架构提高开发效率、优化用户体验、增强可扩展性和稳定性,降低维护成本,提升安全性。玩家可发布陪玩需求,陪玩人员发布服务信息,支持在线聊天、预约及线下陪玩功能,满足多样化需求。[演示链接](https://www.51duoke.cn/games/?id=7)
|
13天前
|
安全 算法 机器人
双重防护!红娘相亲app搭建开发,婚恋交友系统登录方式,密码+验证码的优势
在婚恋交友系统中,密码和验证码是两种重要的安全措施。密码用于验证用户身份,应设置为复杂组合以防止未经授权的访问;验证码则通过图形或字符识别,防止自动化攻击如暴力破解和注册机器人。两者同时开启可显著提高安全性,防止暴力破解和自动化注册,提升用户信任感。建议要求强密码、定期更新验证码样式,并在可疑登录时增加验证码复杂性。这样既能保障用户信息安全,又兼顾了用户体验。 ![交友11111.jpg](https://ucc.alicdn.com/pic/developer-ecology/hy2p6wcvgk4oe_c9eb8d6eb8144866b0cd1d96ffb0c907.jpg)
|
3月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
809 7
|
3月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
830 1
|
20天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
99 6