86 lines
1.2 KiB
Go
86 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"os"
|
|
"os/signal"
|
|
"platform/pkg/env"
|
|
"platform/pkg/logs"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
|
|
// 初始化环境
|
|
env.Init()
|
|
logs.Init()
|
|
|
|
// 上下文
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
|
|
// 监听退出
|
|
exit := make(chan os.Signal, 1)
|
|
defer close(exit)
|
|
signal.Notify(exit, os.Interrupt, os.Kill)
|
|
defer signal.Stop(exit)
|
|
|
|
// 启动管理子线程
|
|
errCh := make(chan error, 1)
|
|
go func() {
|
|
defer close(errCh)
|
|
err := start(ctx)
|
|
if err != nil {
|
|
errCh <- err
|
|
}
|
|
}()
|
|
|
|
select {
|
|
case <-exit:
|
|
slog.Debug("exit by signal")
|
|
cancel()
|
|
case err := <-errCh:
|
|
slog.Error("exit by error", "error", err)
|
|
}
|
|
}
|
|
|
|
// 连接池,硬编码提供 10000 的容量
|
|
var idle = 100
|
|
var maximum = 10000
|
|
|
|
var pool = make(map[string]*Node, 10000)
|
|
|
|
var tick = 1 * time.Minute
|
|
|
|
type Node struct {
|
|
Ip string
|
|
}
|
|
|
|
var last time.Time
|
|
|
|
func start(ctx context.Context) error {
|
|
ticker := time.NewTicker(tick)
|
|
go func() {
|
|
<-ctx.Done()
|
|
ticker.Stop()
|
|
}()
|
|
|
|
for curr := range ticker.C {
|
|
last = curr
|
|
go func() {
|
|
process(ctx, curr)
|
|
}()
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func process(ctx context.Context, curr time.Time) {
|
|
|
|
// 查询节点状态
|
|
|
|
// 筛选在线节点添加到节点池
|
|
|
|
//
|
|
}
|