mirror of
https://gitee.com/willfree/tcpserver-client.git
synced 2026-10-04 19:52:23 +08:00
增加实现服务器地址最小堆(按照更新时间排序)
This commit is contained in:
1 parent
67bc43860d
commit
53a546d3c3
2 files changed
+45
-1
No files matched your search
@@ -1,11 +1,55 @@
|
||||
package main
|
||||
// 模拟服务器地址列表
|
||||
|
||||
import "time"
|
||||
|
||||
// 服务器地址
|
||||
type CanBeUsedAddr struct {
|
||||
ip string
|
||||
ip string // 服务器IP地址
|
||||
updateTime time.Time // 本地址更新时间
|
||||
}
|
||||
|
||||
func (addr CanBeUsedAddr) getIP() (ip string){
|
||||
// 返回一个可用地址
|
||||
return addr.ip
|
||||
}
|
||||
|
||||
// 可用服务器地址最小堆:确保可以取出最新加入的可用服务器地址
|
||||
type CanBeUsedAddrHeap []CanBeUsedAddr
|
||||
|
||||
// 实现最小堆的接口:比较大小。时间越晚越小
|
||||
func (h *CanBeUsedAddrHeap) Less(i,j int) bool {
|
||||
return (*h)[i].updateTime.After((*h)[j].updateTime)
|
||||
}
|
||||
|
||||
// 实现最小堆的接口:获取堆大小。
|
||||
func (h *CanBeUsedAddrHeap) Len() int {
|
||||
return len(*h)
|
||||
}
|
||||
|
||||
// 实现最小堆的接口:交换两个元素。
|
||||
func (h *CanBeUsedAddrHeap) Swap(i,j int) {
|
||||
(*h)[i], (*h)[j] = (*h)[j], (*h)[i]
|
||||
}
|
||||
|
||||
// 实现最小堆的接口:推入一个元素(并排序)。
|
||||
func (h *CanBeUsedAddrHeap) Push(val interface{}) {
|
||||
*h=append(*h,val.(CanBeUsedAddr))
|
||||
}
|
||||
|
||||
// 实现最小堆的接口:弹出一个元素(最小值)。
|
||||
func (h *CanBeUsedAddrHeap) Pop() interface{}{
|
||||
old:=*h
|
||||
*h=old[:len(old)-1]
|
||||
return old[len(old)-1]
|
||||
}
|
||||
|
||||
// 判断某地址是否在本堆中:不在返回-1,在返回位置
|
||||
func (h *CanBeUsedAddrHeap) IsExistAddr(addr CanBeUsedAddr) int{
|
||||
for i := 0; i < len(*h); i++ {
|
||||
if (*h)[i].ip==addr.ip {
|
||||
return i
|
||||
}
|
||||
}
|
||||
return -1
|
||||
}
|
||||
Binary file not shown.
Reference in new issue
Block a user