// Package network 实现网络通信层 package network import ( "fmt" "io" "net" "git.pyer.club/kingecg/goaidb/protocol" "git.pyer.club/kingecg/goaidb/query" "git.pyer.club/kingecg/goaidb/storage" ) // Server 网络服务器结构体 type Server struct { storage storage.StorageEngine } // NewServer 创建新的网络服务器 func NewServer(storage storage.StorageEngine) *Server { return &Server{storage: storage} } // Serve 启动服务 func (s *Server) Serve(listener net.Listener) { for { conn, err := listener.Accept() if err != nil { fmt.Printf("Failed to accept connection: %v\n", err) continue } go s.handleConnection(conn) } } // 处理客户端连接 func (s *Server) handleConnection(conn net.Conn) { defer conn.Close() buffer := make([]byte, 4*1024) // 4KB缓冲区 for { n, err := conn.Read(buffer) if err != nil { if err != io.EOF { fmt.Printf("Error reading from connection: %v\n", err) } return } // 解析MongoDB协议消息 message, err := protocol.ParseMessage(buffer[:n]) if err != nil { fmt.Printf("Failed to parse message: %v\n", err) continue } // 处理查询请求 response, err := query.HandleQuery(message, s.storage) if err != nil { fmt.Printf("Query handling error: %v\n", err) continue } // 发送响应 _, err = conn.Write(response) if err != nil { fmt.Printf("Failed to send response: %v\n", err) return } } }