feat: main.go 接入配置 + graceful shutdown + logger 迁移

- main.go: 接入 config.Load() 替换硬编码 :8080
- main.go: 添加 signal.NotifyContext + http.Server.Shutdown(10s drain)
- main.go: 初始化 Zap 日志,prod 环境切换 Gin release 模式
- ws/handler.go: 所有 log.Printf 替换为 logger.Log 结构化日志
- 修复 .gitignore 排除规则(/server 仅匹配根目录二进制)
- 新增 zap、viper 依赖
This commit is contained in:
hhs
2026-06-13 15:18:03 +08:00
parent c523f53724
commit da87ec776b
5 changed files with 148 additions and 36 deletions

View File

@@ -2,7 +2,6 @@ package ws
import (
"encoding/json"
"log"
"net/http"
"sync"
"time"
@@ -11,6 +10,7 @@ import (
"github.com/google/uuid"
"github.com/gorilla/websocket"
"github.com/hhs/camtalk/internal/logger"
"github.com/hhs/camtalk/internal/models"
)
@@ -35,7 +35,7 @@ func (c *Client) sendJSON(v any) error {
func ServeWS(c *gin.Context) {
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
log.Printf("websocket upgrade failed: %v", err)
logger.Log.Errorw("websocket upgrade failed", "error", err)
return
}
defer conn.Close()
@@ -49,7 +49,7 @@ func ServeWS(c *gin.Context) {
SessionID: sessionID,
ServerVersion: "0.1.0",
})
log.Printf("client connected: session=%s", sessionID)
logger.Log.Infow("client connected", "session", sessionID)
// 心跳检测
lastPong := time.Now()
@@ -67,7 +67,7 @@ func ServeWS(c *gin.Context) {
select {
case <-ticker.C:
if time.Since(lastPong) > 60*time.Second {
log.Printf("heartbeat timeout: session=%s", sessionID)
logger.Log.Warnw("heartbeat timeout", "session", sessionID)
conn.Close()
return
}
@@ -82,7 +82,7 @@ func ServeWS(c *gin.Context) {
_, message, err := conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseNormalClosure) {
log.Printf("ws read error: %v", err)
logger.Log.Warnw("ws read error", "error", err)
}
break
}
@@ -115,7 +115,7 @@ func ServeWS(c *gin.Context) {
})
continue
}
log.Printf("query received: session=%s request=%s", sessionID, msg.RequestID)
logger.Log.Infow("query received", "session", sessionID, "request", msg.RequestID)
// TODO: 调用 AI 编排流程STT → LLM → TTS
case "config":
@@ -128,11 +128,11 @@ func ServeWS(c *gin.Context) {
})
continue
}
log.Printf("config update: session=%s", sessionID)
logger.Log.Infow("config update", "session", sessionID)
// TODO: 更新会话配置
case "interrupt":
log.Printf("interrupt received: session=%s", sessionID)
logger.Log.Infow("interrupt received", "session", sessionID)
// TODO: 中断当前 AI 响应
default:
@@ -145,5 +145,5 @@ func ServeWS(c *gin.Context) {
}
close(done)
log.Printf("client disconnected: session=%s", sessionID)
logger.Log.Infow("client disconnected", "session", sessionID)
}