- pkg/ws/message.go: 统一消息协议(Message/Response/PushMessage) - pkg/ws/hub.go: Hub 连接管理(注册/注销/按 userID 查找/在线计数) - pkg/ws/client.go: 客户端连接封装(readPump/writePump/心跳 30s) - pkg/ws/pubsub.go: Redis Pub/Sub 消息路由(按用户频道发布/订阅) - app/ws/handler.go: WebSocket 升级处理(JWT 认证 + 消息分发) - app/ws/router.go: GET /ws 路由注册 - app/ws/provider.go: Wire Provider Set - 更新 provider/router 集成 WebSocket 模块 Made-with: Cursor
33 lines
704 B
Go
33 lines
704 B
Go
package ws
|
|
|
|
import (
|
|
"github.com/echochat/backend/config"
|
|
"github.com/echochat/backend/pkg/ws"
|
|
"github.com/google/wire"
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
// ProvideHub 创建并启动 Hub 实例
|
|
func ProvideHub() *ws.Hub {
|
|
hub := ws.NewHub()
|
|
go hub.Run()
|
|
return hub
|
|
}
|
|
|
|
// ProvidePubSub 创建 PubSub 实例
|
|
func ProvidePubSub(rdb *redis.Client, hub *ws.Hub) *ws.PubSub {
|
|
return ws.NewPubSub(rdb, hub)
|
|
}
|
|
|
|
// ProvideWSHandler 创建 WebSocket Handler
|
|
func ProvideWSHandler(hub *ws.Hub, pubsub *ws.PubSub, cfg *config.JWTConfig) *Handler {
|
|
return NewHandler(hub, pubsub, cfg)
|
|
}
|
|
|
|
// WSSet WebSocket 模块 Wire Provider Set
|
|
var WSSet = wire.NewSet(
|
|
ProvideHub,
|
|
ProvidePubSub,
|
|
ProvideWSHandler,
|
|
)
|