增量更新节点状态
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
检查连接被提前关闭的问题
|
数据通道池化
|
||||||
|
|
||||||
|
协程池化
|
||||||
|
|
||||||
访问失败的也返回访问记录
|
访问失败的也返回访问记录
|
||||||
|
|
||||||
解决节点断开立即重连会导致 status 覆盖的问题
|
解决节点断开立即重连会导致 status 覆盖的问题,维护一个修改表,每次提交后清空,每个节点的修改在同一阶段内只有一次
|
||||||
|
|
||||||
实现一个机制使更新数据的后项能够覆盖前项
|
|
||||||
|
|
||||||
节点每次发送心跳后提供或计算 loss 和 rtt 信息,并对比 host 和 status,将需要更新的数据提交到更新队列
|
节点每次发送心跳后提供或计算 loss 和 rtt 信息,并对比 host 和 status,将需要更新的数据提交到更新队列
|
||||||
|
|
||||||
|
|||||||
@@ -190,12 +190,23 @@ func startWeb(ctx context.Context) error {
|
|||||||
|
|
||||||
func startTask(ctx context.Context) error {
|
func startTask(ctx context.Context) error {
|
||||||
|
|
||||||
|
// 维护一个修改表,每次提交后清空,每个节点的修改在同一阶段内只有一次
|
||||||
var lock = sync.Mutex{}
|
var lock = sync.Mutex{}
|
||||||
var updates = make([]*core.Edge, 0)
|
var updates = make([]*core.Edge, 0)
|
||||||
|
var updatesMap = make(map[int32]*core.Edge)
|
||||||
go func() {
|
go func() {
|
||||||
for data := range app.EdgeUpdates {
|
for data := range app.EdgeUpdates {
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
updates = append(updates, data)
|
if update, ok := updatesMap[data.Id]; ok {
|
||||||
|
if data.Status != update.Status {
|
||||||
|
// 如果状态发生变化,则更新
|
||||||
|
updatesMap[data.Id] = data
|
||||||
|
updates = append(updates, data)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
updatesMap[data.Id] = data
|
||||||
|
updates = append(updates, data)
|
||||||
|
}
|
||||||
lock.Unlock()
|
lock.Unlock()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|||||||
Reference in New Issue
Block a user