众筹APP开发丨众筹系统开发技术详细丨众筹系统源码及功能

简介:  type BlockChainSyncServer struct { chainId string net protocol.NetService // 网络服务,向其他节点获取/发送数据,由外部模块提供实现
  1. 模块解读

逻辑控制对象解读

控制流程梳理

7.2.1. 逻辑控制服务解读
7.2.1.1. 同步模块服务
type BlockChainSyncServer struct {

chainId string

net             protocol.NetService      // 网络服务,向其他节点获取/发送数据,由外部模块提供实现
msgBus          msgbus.MessageBus        // 内部消息服务,提供订阅指定 Topic 的功能,由外部模块提供实现
blockChainStore protocol.BlockchainStore // 存储服务,提供本地区块的读写,由外部模块提供实现
ledgerCache     protocol.LedgerCache     // 节点本地最高快的缓存
blockVerifier   protocol.BlockVerifier   // 区块验证服务,校验区块有效性
blockCommitter  protocol.BlockCommitter  // 区块提交服务,提交验证有效的区块

log   *logger.CMLogger
conf  *BlockSyncServerConf // Sync 模块基础配置
start int32                // 服务是否启动的原子数标记位
close chan bool            // 关闭信号通道

scheduler *Routine // 调度服务通道,包含处理信号接收,处理入口等逻辑
processor *Routine // 处理服务通道,处理区块

}
主要的方法入口:

func (sync *BlockChainSyncServer) Start() error {

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

// 1. 初始化配置
// 1)初始化任务调度服务入口
processor := newProcessor()
scheduler := newScheduler()
// 2)初始化消息队列
sync.scheduler = NewRoutine("scheduler", scheduler.handler, scheduler.getServiceState, sync.log)
sync.processor = NewRoutine("processor", processor.handler, processor.getServiceState, sync.log)

// 2. 注册监听消息
// 1)在 msgBus 中注册监听 "msgbus.BlockInfo" 的Topic
sync.msgBus.Register(msgbus.BlockInfo, sync)
// 2) 在 Net 服务中注册监听 “netPb.NetMsg_SYNC_BLOCK_MSG” 消息类型
sync.net.Subscribe(netPb.NetMsg_SYNC_BLOCK_MSG, sync.blockSyncMsgHandler)
sync.net.ReceiveMsg(netPb.NetMsg_SYNC_BLOCK_MSG, sync.blockSyncMsgHandler)

// 3. 启动消息队列
sync.scheduler.begin()
sync.processor.begin()

// 4. 启动 同步模块的定时任务
go sync.loop()

}
7.2.1.2. 调度服务
// scheduler Retrieves block data of specified height from different nodes
type scheduler struct {

peers             map[string]uint64     // 网络中节点的高度 {"node1": 101, "node2": 102, "node3": 103}
blockStates       map[uint64]blockState // 指定高度的处理状态 {101: Received, 102: Pending, 103: New}
pendingTime       map[uint64]time.Time  // 指定高度的处理发起时间 {101: time1, 102: time2, 103: time3}
pendingBlocks     map[uint64]string     // 指定高度的查询节点ID {101: "node1", 102: "node2", 103: "node3"}
receivedBlocks    map[uint64]string     // 指定高度已收到区块记录的缓存 {101: "node1", 102: "node2", 103: "node3"}
lastRequest       time.Time             // 批量请求发起时间
pendingRecvHeight uint64                // 本地当前最高块 + 1,下一个请求批次的起始高度

maxPendingBlocks    uint64        // 最大区块处理数量,等同于 blockStates 的长度
BatchesizeInEachReq uint64        // 最大单次请求批次区块数量
peerReqTimeout      time.Duration // 网络中区块高度查询超时时间
reqTimeThreshold    time.Duration // 是否开始同步的检查项,time.Now - lastRequest > reqTimeThreshold == true 开始同步

log    *logger.CMLogger
sender syncSender // 同步模块对象实例
ledger protocol.LedgerCache

}
7.2.1.3. 处理服务
type processor struct {

queue          map[uint64]blockWithPeerInfo // 收到的区块消息缓存
hasCommitBlock uint64                       // 本地已经提交的区块高度记录

log         *logger.CMLogger
ledgerCache protocol.LedgerCache // 本地账本缓存
verifyAndAddBlock     // 校验和存储模块接口实例

}
7.2.1.4. 消息队列
// Routine Provide hosting of the service in goroutine
type Routine struct {

name       string          
handle     handleFunc      // 调度逻辑入口
queryState getServiceState
log        *logger.CMLogger

start int32                // 服务启动标记位
queue *queue.PriorityQueue // 消息队列
out   chan queue.Item      // 结果队列,转发消息类型,scheduler 的消息由 processor 的 handle 再次处理,processor 由 scheduler 处理
stop  chan struct{}

}

相关文章
|
1天前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码服务器环境配置及app功能
一对一直播源码阿里云服务器环境配置及要求
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
6天前
|
NoSQL PHP Redis
布谷语音app源码服务器环境配置及技术开发语言
布谷语音app源码服务器环境配置及技术语言研发。。
|
2月前
仿SOUL社交友附近人婚恋约仿陌陌APP网站源码
仿SOUL社交友附近人婚恋约仿陌陌APP网站源码
47 0
仿SOUL社交友附近人婚恋约仿陌陌APP网站源码
|
3月前
|
测试技术
一款功能完善的智能匹配1V1视频聊天App应该通过的测试CASE
文章列举了一系列针对1V1视频聊天App的测试用例,包括UI样式、权限请求、登录流程、匹配逻辑、消息处理、充值功能等多个方面的测试点,并标注了每个测试用例的执行状态,如通过(PASS)、失败(FAIL)或需要进一步处理(延期修改、待定、方案再定等)。
60 0
|
14天前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
208 7
|
14天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
279 1
|
14天前
|
JavaScript 前端开发 UED
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
Vue与uni-app开发中通过@font-face巧妙引入自定义字体
36 9
|
18天前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
105 1