端口分配时加锁;网关上线后保存平台恢复的节点与授权数据;现在新节点连接后会按需向平台报告更新
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"proxy-server/gateway/core"
|
||||
"proxy-server/utils"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type Stoppable interface {
|
||||
@@ -14,25 +17,44 @@ var (
|
||||
Name string
|
||||
PlatformSecret string // 平台密钥,验证接收的请求是否属于平台
|
||||
|
||||
Assigns = core.SyncMap[uint16, int32]{} // 转发端口 -> 节点 ID
|
||||
Edges = core.SyncMap[int32, uint16]{} // 节点 ID -> 转发端口
|
||||
Permits = core.SyncMap[int32, *core.Permit]{} // 转发端口 -> 权限配置
|
||||
Edges = core.SyncMap[int32, *core.Edge]{} // 节点信息表 (包外只读!数据存储有关联性,所有写入操作只在包内进行)
|
||||
Assigns = core.SyncMap[uint16, int32]{} // 分配索引 (包外只读!数据存储有关联性,所有写入操作只在包内进行)
|
||||
|
||||
Permits = core.SyncMap[int32, *core.Permit]{} // 节点权限表 (包外只读!数据存储有关联性,所有写入操作只在包内进行)
|
||||
|
||||
CtrlConnWg utils.CountWaitGroup // 控制通道计数器
|
||||
DataConnWg utils.CountWaitGroup // 数据通道计数器
|
||||
FwdLesWg utils.CountWaitGroup // 转发监听端口计数器
|
||||
UserConnWg utils.CountWaitGroup // 用户连接计数器
|
||||
UserConnMap core.SyncMap[string, *core.Conn] // 用户连接暂存
|
||||
|
||||
LockPortAssign = sync.Mutex{} // 锁定端口分配,防止并发冲突
|
||||
EdgeUpdates = make(chan *core.Edge, 1000) // 节点更新通知通道
|
||||
)
|
||||
|
||||
func AddEdge(id int32, port uint16) {
|
||||
Edges.Store(id, port)
|
||||
func NewEdge(id int32, port uint16, addr *net.TCPAddr) {
|
||||
var host = addr.IP.String()
|
||||
var edge = &core.Edge{
|
||||
Id: id,
|
||||
Host: &host,
|
||||
Port: &port,
|
||||
}
|
||||
|
||||
// todo 查询 geo 信息
|
||||
|
||||
Edges.Store(id, edge)
|
||||
Assigns.Store(port, id)
|
||||
EdgeUpdates <- edge
|
||||
}
|
||||
|
||||
func DelEdge(port uint16) {
|
||||
id, _ := Assigns.LoadAndDelete(port)
|
||||
Edges.Delete(id)
|
||||
func StoreEdge(edge *core.Edge) error {
|
||||
if edge == nil || edge.Id == 0 || edge.Port == nil {
|
||||
return fmt.Errorf("无效的边缘节点: %+v", edge)
|
||||
}
|
||||
|
||||
Edges.Store(edge.Id, edge)
|
||||
Assigns.Store(*edge.Port, edge.Id)
|
||||
return nil
|
||||
}
|
||||
|
||||
func LoadPermit(port uint16) *core.Permit {
|
||||
@@ -48,3 +70,7 @@ func LoadPermit(port uint16) *core.Permit {
|
||||
|
||||
return permit
|
||||
}
|
||||
|
||||
func StorePermit(def *core.PermitDef) {
|
||||
Permits.Store(def.Id, &def.Permit)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user