完善资源关闭逻辑,添加数据库和Redis连接的退出处理

This commit is contained in:
2025-04-01 11:26:37 +08:00
parent 6d89470a89
commit 87eecdb8cb
7 changed files with 74 additions and 50 deletions

View File

@@ -10,7 +10,8 @@
- [ ] 实名认证 - [ ] 实名认证
- [ ] 充值余额 - [ ] 充值余额
- [ ] 选择套餐 - [ ] 选择套餐
- [ ] 提取 IP - [X] 提取 IP
- [ ] 长效提取
- [ ] 连接 - [ ] 连接
中间件: 中间件:
@@ -19,18 +20,17 @@
- [ ] Limiter - [ ] Limiter
- [ ] Compress - [ ] Compress
channel 数据存入顺序,数据库 > 缓存 > 外部接口 channel 优化:
- 重新梳理逻辑流程,简化循环
- 端口分配时加锁
- 数据存入顺序,数据库 > 缓存 > 外部接口
remote 令牌问题 remote 令牌问题
用对称加密处理密钥 用对称加密处理密钥
现在的节点分配逻辑是,每个 user_host:node_port 组算一个分配数,考虑是否改成每个用户算一个分配数
考虑将鉴权逻辑放到 handler 里,统一动静态鉴权以及解耦服务层 考虑将鉴权逻辑放到 handler 里,统一动静态鉴权以及解耦服务层
有些地方在用手动事务,有时间改成自动事务
重新手动实现 model 层 重新手动实现 model 层
环境变量配置默认会话配置 环境变量配置默认会话配置
@@ -41,16 +41,8 @@ oauth token 验证授权范围
账单数据表结构修改 账单数据表结构修改
captcha 自定义生成流程,弃用 store
短信发送日志 短信发送日志
captcha_id 关联用户本机信息,实现验证码设备绑定(或者其他方式)
退出时主动断开数据库缓存等连接
固有字段统一放在最开始
## 环境变量 ## 环境变量
在 init/env 中有定义和默认值 在 init/env 中有定义和默认值
@@ -71,10 +63,3 @@ captcha_id 关联用户本机信息,实现验证码设备绑定(或者其他
api账密api:123456 api账密api:123456
## 业务逻辑 ## 业务逻辑
### 动态 ip 淘汰策略
1. 用户请求节点
2. 查询对应条件下的节点池
3. 选择对应数量的节点,发起连接
4.

View File

@@ -65,4 +65,14 @@ func main() {
slog.Error("Server error", slog.Any("err", err)) slog.Error("Server error", slog.Any("err", err))
} }
} }
// 关闭资源
err = orm.Exit()
if err != nil {
slog.Error("Failed to close database connection", slog.Any("err", err))
}
err = rds.Exit()
if err != nil {
slog.Error("Failed to close redis connection", slog.Any("err", err))
}
} }

View File

@@ -47,6 +47,17 @@ func Init() {
DB = db DB = db
} }
func Exit() error {
if DB != nil {
conn, err := DB.DB()
if err != nil {
return err
}
return conn.Close()
}
return nil
}
type WithAlias interface { type WithAlias interface {
Alias() string Alias() string
} }

View File

@@ -16,3 +16,10 @@ func Init() {
Password: env.RedisPass, Password: env.RedisPass,
}) })
} }
func Exit() error {
if Client != nil {
return Client.Close()
}
return nil
}

View File

@@ -52,9 +52,8 @@ func loginByPhone(c *fiber.Ctx, req *LoginReq) error {
} }
// 查找用户 todo 获取权限信息 // 查找用户 todo 获取权限信息
var tx = q.Q.Begin()
var user *models.User var user *models.User
err = q.Q.Transaction(func(tx *q.Query) error {
user, err = tx.User. user, err = tx.User.
Where(tx.User.Phone.Eq(req.Username)). Where(tx.User.Phone.Eq(req.Username)).
Take() Take()
@@ -78,7 +77,8 @@ func loginByPhone(c *fiber.Ctx, req *LoginReq) error {
return err return err
} }
err = tx.Commit() return nil
})
if err != nil { if err != nil {
return err return err
} }

View File

@@ -1,20 +1,22 @@
package handlers package handlers
import ( import (
"platform/pkg/rds" q "platform/web/queries"
"time"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
) )
func Temp(c *fiber.Ctx) error { func Temp(c *fiber.Ctx) error {
id := c.Query("id") channels, err := q.Channel.Debug().Where(
result, err := rds.Client.Get(c.Context(), "channel:"+id).Result() q.Channel.Expiration.Lt(time.Now().Add(3 * time.Minute)),
).Find()
if err != nil { if err != nil {
return err return err
} }
return c.JSON(fiber.Map{ return c.JSON(fiber.Map{
"result": result, "result": channels,
}) })
} }

View File

@@ -10,6 +10,8 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gofiber/fiber/v2/middleware/requestid" "github.com/gofiber/fiber/v2/middleware/requestid"
"github.com/google/uuid"
"github.com/jxskiss/base62"
) )
import _ "net/http/pprof" import _ "net/http/pprof"
@@ -36,6 +38,7 @@ func New(config *Config) (*Server, error) {
func (s *Server) Run() error { func (s *Server) Run() error {
// config
s.fiber = fiber.New(fiber.Config{ s.fiber = fiber.New(fiber.Config{
ErrorHandler: ErrorHandler, ErrorHandler: ErrorHandler,
}) })
@@ -43,7 +46,12 @@ func (s *Server) Run() error {
s.fiber.Use(logger.New(logger.Config{ s.fiber.Use(logger.New(logger.Config{
DisableColors: false, DisableColors: false,
})) }))
s.fiber.Use(requestid.New()) s.fiber.Use(requestid.New(requestid.Config{
Generator: func() string {
binary, _ := uuid.New().MarshalBinary()
return base62.EncodeToString(binary)
},
}))
ApplyRouters(s.fiber) ApplyRouters(s.fiber)
@@ -56,6 +64,7 @@ func (s *Server) Run() error {
} }
}() }()
// listen
port := env.AppPort port := env.AppPort
slog.Info("Server started on :" + port) slog.Info("Server started on :" + port)
err := s.fiber.Listen(":" + port) err := s.fiber.Listen(":" + port)