feat(database): 将数据库连接池从 NutsDB 迁移到 SQLite

- 修改 server/ws/example.go 中的数据库连接池引用,将 m.nutsPool 替换为 m.sqlitePool
- 更新 go.mod 文件中的 Go 版本从 1.24.3 升级到 1.25.0
- 移除 nutsdb 依赖项 github.com/nutsdb/nutsdb v1.1.0
- 移除其他间接依赖包括 github.com/antlabs/stl、github.com/antlabs/timer、
  github.com/bwmarrin/snowflake、github.com/cespare/xxhash/v2 等
- 添加 SQLite 相关依赖 github.com/glebarez/go-sqlite 和 github.com/glebarez/sqlite
- 更新 golang.org/x 相关包版本,包括 exp、sync、sys、text 等模块
- 在 go.sum 中同步更新所有依赖项的校验和变化
This commit is contained in:
2026-02-27 16:35:21 +08:00
parent bb0f3de20a
commit c0629b4038
11 changed files with 479 additions and 458 deletions
+1 -1
View File
@@ -85,7 +85,7 @@ func TestWebSocket() {
}
log.Println("2. 管理器创建成功")
log.Println("3. 获取在线连接数")
count, err := m.nutsPool.Count()
count, err := m.sqlitePool.Count()
if err != nil {
log.Printf("获取在线连接数失败:%v", err)
} else {
+26 -26
View File
@@ -94,7 +94,7 @@ type Manager struct {
config *Config // 配置
upgrader *websocket.Upgrader // HTTP升级器
connections map[string]*Connection // 内存中的连接(connID -> Connection)
nutsPool *pool.NutsPool // NutsDB连接池
sqlitePool *pool.SQLitePool // SQLite连接池
mutex sync.RWMutex // 读写锁(保护connections)
// 业务回调:收到消息时触发(用户自定义处理逻辑)
OnMessage func(connID string, msgType int, data any)
@@ -155,11 +155,11 @@ func NewManager(config *Config) (*Manager, error) {
finalConfig := defaultConfig.Merge(config)
// 初始化升级器
upgrader := &websocket.Upgrader{
ReadBufferSize: config.ReadBufferSize,
WriteBufferSize: config.WriteBufferSize,
ReadBufferSize: finalConfig.ReadBufferSize,
WriteBufferSize: finalConfig.WriteBufferSize,
CheckOrigin: func(r *http.Request) bool {
// 跨域检查
if config.AllowAllOrigins {
if finalConfig.AllowAllOrigins {
return true
}
origin := r.Header.Get("Origin")
@@ -172,17 +172,17 @@ func NewManager(config *Config) (*Manager, error) {
},
}
// 初始化NutsDB连接池
nutsPool, err := pool.NewNutsPool()
// 初始化SQLite连接池
sqlitePool, err := pool.NewSQLitePool()
if err != nil {
return nil, fmt.Errorf("failed to create nuts pool: %w", err)
return nil, fmt.Errorf("failed to create sqlite pool: %w", err)
}
return &Manager{
config: finalConfig,
upgrader: upgrader,
connections: make(map[string]*Connection),
nutsPool: nutsPool,
sqlitePool: sqlitePool,
mutex: sync.RWMutex{},
// 默认回调(用户可覆盖)
OnMessage: func(connID string, msgType int, data any) {
@@ -246,7 +246,7 @@ func (m *Manager) Upgrade(w http.ResponseWriter, r *http.Request, connID string)
m.connections[connID] = wsConn
m.mutex.Unlock()
// 存储到NutsDB
// 存储到SQLite
connInfo := &pool.ConnectionInfo{
ID: connID,
Type: pool.ConnTypeWebSocket,
@@ -259,8 +259,8 @@ func (m *Manager) Upgrade(w http.ResponseWriter, r *http.Request, connID string)
"userAgent": r.Header.Get("User-Agent"),
},
}
if err := m.nutsPool.Add(connInfo); err != nil {
log.Printf("[错误] 存储连接到NutsDB失败:%v", err)
if err := m.sqlitePool.Add(connInfo); err != nil {
log.Printf("[错误] 存储连接到SQLite失败:%v", err)
// 不影响连接建立,仅记录错误
}
@@ -311,12 +311,12 @@ func (c *Connection) ReadPump() {
// 更新最后使用时间
now := time.Now()
// 从NutsDB获取连接信息并更新
connInfo, err := c.manager.nutsPool.Get(c.connID)
// 从SQLite获取连接信息并更新
connInfo, err := c.manager.sqlitePool.Get(c.connID)
if err == nil && connInfo != nil {
connInfo.LastUsed = now
if err := c.manager.nutsPool.Update(connInfo); err != nil {
log.Printf("[错误] 更新NutsDB连接信息失败:%v", err)
if err := c.manager.sqlitePool.Update(connInfo); err != nil {
log.Printf("[错误] 更新SQLite连接信息失败:%v", err)
// 不影响消息处理,仅记录错误
}
}
@@ -411,12 +411,12 @@ func (c *Connection) Send(data []byte) error {
// 更新最后使用时间
now := time.Now()
// 从NutsDB获取连接信息并更新
connInfo, err := c.manager.nutsPool.Get(c.connID)
// 从SQLite获取连接信息并更新
connInfo, err := c.manager.sqlitePool.Get(c.connID)
if err == nil && connInfo != nil {
connInfo.LastUsed = now
if err := c.manager.nutsPool.Update(connInfo); err != nil {
log.Printf("[错误] 更新NutsDB连接信息失败:%v", err)
if err := c.manager.sqlitePool.Update(connInfo); err != nil {
log.Printf("[错误] 更新SQLite连接信息失败:%v", err)
// 不影响消息发送,仅记录错误
}
}
@@ -446,9 +446,9 @@ func (c *Connection) Close(err error) {
delete(c.manager.connections, c.connID)
c.manager.mutex.Unlock()
// 从NutsDB移除
if err := c.manager.nutsPool.Remove(c.connID); err != nil {
log.Printf("[错误] 从NutsDB移除连接失败:%v", err)
// 从SQLite移除
if err := c.manager.sqlitePool.Remove(c.connID); err != nil {
log.Printf("[错误] 从SQLite移除连接失败:%v", err)
// 不影响连接关闭,仅记录错误
}
@@ -529,7 +529,7 @@ func (m *Manager) GetConn(connID string) *Connection {
// GetAllConnIDs 获取所有在线连接的ID列表
func (m *Manager) GetAllConnIDs() ([]string, error) {
return m.nutsPool.GetAllConnIDs()
return m.sqlitePool.GetAllConnIDs()
}
// CloseAll 关闭所有连接
@@ -555,9 +555,9 @@ func (m *Manager) CloseAll() {
func (m *Manager) Close() error {
// 关闭所有连接
m.CloseAll()
// 关闭NutsDB连接池
if m.nutsPool != nil {
return m.nutsPool.Close()
// 关闭SQLite连接池
if m.sqlitePool != nil {
return m.sqlitePool.Close()
}
return nil
}