feat(chat): implement sequence pre-allocation, versioned sync, and push worker
Introduce several performance and synchronization enhancements: - Implement `SeqBufferManager` to allow sequence number pre-allocation via Redis Lua scripts, reducing atomic increment overhead. - Add `PushWorker` to handle asynchronous message pushing using Redis Streams. - Implement incremental conversation synchronization via `ConversationVersionLog` to allow clients to fetch only recent changes. - Add support for Gzip compression in WebSocket communications to reduce bandwidth usage. - Update dependency injection and configuration to support these new components.
This commit is contained in:
@@ -18,7 +18,7 @@ import (
|
||||
"with_you/internal/service"
|
||||
|
||||
"github.com/google/wire"
|
||||
redislib "github.com/redis/go-redis/v9"
|
||||
redisPkg "github.com/redis/go-redis/v9"
|
||||
"go.uber.org/zap"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
@@ -212,8 +212,21 @@ func ProvideChatService(
|
||||
cacheBackend cache.Cache,
|
||||
uploadService *service.UploadService,
|
||||
pushService service.PushService,
|
||||
seqBufferMgr *cache.SeqBufferManager,
|
||||
pushWorker *service.PushWorker,
|
||||
redisClient *redis.Client,
|
||||
versionLogRepo repository.ConversationVersionLogRepository,
|
||||
cfg *config.Config,
|
||||
) service.ChatService {
|
||||
return service.NewChatService(messageRepo, userRepo, nil, publisher, cacheBackend, uploadService, pushService)
|
||||
var vlogOpt []repository.ConversationVersionLogRepository
|
||||
if cfg.VersionLog.Enabled {
|
||||
vlogOpt = []repository.ConversationVersionLogRepository{versionLogRepo}
|
||||
}
|
||||
var rdb *redisPkg.Client
|
||||
if redisClient != nil {
|
||||
rdb = redisClient.GetClient()
|
||||
}
|
||||
return service.NewChatService(messageRepo, userRepo, nil, publisher, cacheBackend, uploadService, pushService, seqBufferMgr, pushWorker, rdb, vlogOpt...)
|
||||
}
|
||||
|
||||
// ProvideScheduleService 提供日程服务
|
||||
@@ -398,7 +411,7 @@ func ProvideLogService(
|
||||
|
||||
// ProvideQRCodeLoginService 提供二维码登录服务
|
||||
func ProvideHotRankWorker(cfg *config.Config, postRepo repository.PostRepository, channelRepo repository.ChannelRepository, cacheBackend cache.Cache, redisClient *redis.Client) *service.HotRankWorker {
|
||||
var rdb *redislib.Client
|
||||
var rdb *redisPkg.Client
|
||||
if redisClient != nil {
|
||||
rdb = redisClient.GetClient()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user