feat(pool): 移除BadgerDB连接池实现并集成NutsDB
- 删除pool/badger.go文件中的BadgerDB连接池相关代码 - 更新WebSocket示例移除badger目录参数依赖 - 更新TCP示例移除badger目录参数依赖 - 升级github.com/dgraph-io/badger/v4依赖从v4.2.0到v4.9.1 - 新增github.com/nutsdb/nutsdb依赖用于替代BadgerDB功能 - 添加WebSocket和TCP连接测试示例代码 - 更新多个间接依赖包版本包括ristretto、humanize、compress等
This commit is contained in:
+33
-1
@@ -19,7 +19,7 @@ func NewWs() *Manager {
|
||||
}
|
||||
|
||||
// 2. 创建管理器
|
||||
m, err := NewManager(customConfig, "./badger/ws")
|
||||
m, err := NewManager(customConfig)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create manager: %v", err)
|
||||
}
|
||||
@@ -74,3 +74,35 @@ func main() {
|
||||
log.Println("WebSocket服务启动:http://localhost:8080/ws")
|
||||
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||
}
|
||||
|
||||
// TestWebSocket 测试WebSocket连接
|
||||
func TestWebSocket() {
|
||||
log.Println("=== 测试WebSocket连接 ===")
|
||||
log.Println("1. 创建WebSocket管理器")
|
||||
m, err := NewManager(DefaultConfig())
|
||||
if err != nil {
|
||||
log.Fatalf("创建管理器失败:%v", err)
|
||||
}
|
||||
log.Println("2. 管理器创建成功")
|
||||
log.Println("3. 获取在线连接数")
|
||||
count, err := m.nutsPool.Count()
|
||||
if err != nil {
|
||||
log.Printf("获取在线连接数失败:%v", err)
|
||||
} else {
|
||||
log.Printf("当前在线连接数:%d", count)
|
||||
}
|
||||
log.Println("4. 获取所有在线连接ID")
|
||||
connIDs, err := m.GetAllConnIDs()
|
||||
if err != nil {
|
||||
log.Printf("获取在线连接ID失败:%v", err)
|
||||
} else {
|
||||
log.Printf("在线连接ID:%v", connIDs)
|
||||
}
|
||||
log.Println("5. 关闭管理器")
|
||||
if err := m.Close(); err != nil {
|
||||
log.Printf("关闭管理器失败:%v", err)
|
||||
} else {
|
||||
log.Println("管理器关闭成功")
|
||||
}
|
||||
log.Println("=== WebSocket测试完成 ===")
|
||||
}
|
||||
|
||||
+24
-24
@@ -94,7 +94,7 @@ type Manager struct {
|
||||
config *Config // 配置
|
||||
upgrader *websocket.Upgrader // HTTP升级器
|
||||
connections map[string]*Connection // 内存中的连接(connID -> Connection)
|
||||
badgerPool *pool.BadgerPool // BadgerDB连接池
|
||||
nutsPool *pool.NutsPool // NutsDB连接池
|
||||
mutex sync.RWMutex // 读写锁(保护connections)
|
||||
// 业务回调:收到消息时触发(用户自定义处理逻辑)
|
||||
OnMessage func(connID string, msgType int, data any)
|
||||
@@ -150,7 +150,7 @@ func (c *Config) Merge(other *Config) *Config {
|
||||
}
|
||||
|
||||
// NewManager 创建连接管理器
|
||||
func NewManager(config *Config, dbPath string) (*Manager, error) {
|
||||
func NewManager(config *Config) (*Manager, error) {
|
||||
defaultConfig := DefaultConfig()
|
||||
finalConfig := defaultConfig.Merge(config)
|
||||
// 初始化升级器
|
||||
@@ -172,17 +172,17 @@ func NewManager(config *Config, dbPath string) (*Manager, error) {
|
||||
},
|
||||
}
|
||||
|
||||
// 初始化BadgerDB连接池
|
||||
badgerPool, err := pool.NewBadgerPool(dbPath)
|
||||
// 初始化NutsDB连接池
|
||||
nutsPool, err := pool.NewNutsPool()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create badger pool: %w", err)
|
||||
return nil, fmt.Errorf("failed to create nuts pool: %w", err)
|
||||
}
|
||||
|
||||
return &Manager{
|
||||
config: finalConfig,
|
||||
upgrader: upgrader,
|
||||
connections: make(map[string]*Connection),
|
||||
badgerPool: badgerPool,
|
||||
nutsPool: nutsPool,
|
||||
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()
|
||||
|
||||
// 存储到BadgerDB
|
||||
// 存储到NutsDB
|
||||
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.badgerPool.Add(connInfo); err != nil {
|
||||
log.Printf("[错误] 存储连接到BadgerDB失败:%v", err)
|
||||
if err := m.nutsPool.Add(connInfo); err != nil {
|
||||
log.Printf("[错误] 存储连接到NutsDB失败:%v", err)
|
||||
// 不影响连接建立,仅记录错误
|
||||
}
|
||||
|
||||
@@ -311,12 +311,12 @@ func (c *Connection) ReadPump() {
|
||||
|
||||
// 更新最后使用时间
|
||||
now := time.Now()
|
||||
// 从BadgerDB获取连接信息并更新
|
||||
connInfo, err := c.manager.badgerPool.Get(c.connID)
|
||||
// 从NutsDB获取连接信息并更新
|
||||
connInfo, err := c.manager.nutsPool.Get(c.connID)
|
||||
if err == nil && connInfo != nil {
|
||||
connInfo.LastUsed = now
|
||||
if err := c.manager.badgerPool.Update(connInfo); err != nil {
|
||||
log.Printf("[错误] 更新BadgerDB连接信息失败:%v", err)
|
||||
if err := c.manager.nutsPool.Update(connInfo); err != nil {
|
||||
log.Printf("[错误] 更新NutsDB连接信息失败:%v", err)
|
||||
// 不影响消息处理,仅记录错误
|
||||
}
|
||||
}
|
||||
@@ -411,12 +411,12 @@ func (c *Connection) Send(data []byte) error {
|
||||
|
||||
// 更新最后使用时间
|
||||
now := time.Now()
|
||||
// 从BadgerDB获取连接信息并更新
|
||||
connInfo, err := c.manager.badgerPool.Get(c.connID)
|
||||
// 从NutsDB获取连接信息并更新
|
||||
connInfo, err := c.manager.nutsPool.Get(c.connID)
|
||||
if err == nil && connInfo != nil {
|
||||
connInfo.LastUsed = now
|
||||
if err := c.manager.badgerPool.Update(connInfo); err != nil {
|
||||
log.Printf("[错误] 更新BadgerDB连接信息失败:%v", err)
|
||||
if err := c.manager.nutsPool.Update(connInfo); err != nil {
|
||||
log.Printf("[错误] 更新NutsDB连接信息失败:%v", err)
|
||||
// 不影响消息发送,仅记录错误
|
||||
}
|
||||
}
|
||||
@@ -446,9 +446,9 @@ func (c *Connection) Close(err error) {
|
||||
delete(c.manager.connections, c.connID)
|
||||
c.manager.mutex.Unlock()
|
||||
|
||||
// 从BadgerDB移除
|
||||
if err := c.manager.badgerPool.Remove(c.connID); err != nil {
|
||||
log.Printf("[错误] 从BadgerDB移除连接失败:%v", err)
|
||||
// 从NutsDB移除
|
||||
if err := c.manager.nutsPool.Remove(c.connID); err != nil {
|
||||
log.Printf("[错误] 从NutsDB移除连接失败:%v", err)
|
||||
// 不影响连接关闭,仅记录错误
|
||||
}
|
||||
|
||||
@@ -529,7 +529,7 @@ func (m *Manager) GetConn(connID string) *Connection {
|
||||
|
||||
// GetAllConnIDs 获取所有在线连接的ID列表
|
||||
func (m *Manager) GetAllConnIDs() ([]string, error) {
|
||||
return m.badgerPool.GetAllConnIDs()
|
||||
return m.nutsPool.GetAllConnIDs()
|
||||
}
|
||||
|
||||
// CloseAll 关闭所有连接
|
||||
@@ -555,9 +555,9 @@ func (m *Manager) CloseAll() {
|
||||
func (m *Manager) Close() error {
|
||||
// 关闭所有连接
|
||||
m.CloseAll()
|
||||
// 关闭BadgerDB连接池
|
||||
if m.badgerPool != nil {
|
||||
return m.badgerPool.Close()
|
||||
// 关闭NutsDB连接池
|
||||
if m.nutsPool != nil {
|
||||
return m.nutsPool.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user