wsc

package module
v0.9.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 29, 2026 License: Apache-2.0 Imports: 26 Imported by: 2

README

Go WebSocket Client (go-wsc) 🚀

Go Version Release Go Report Card Go Reference GitHub Issues GitHub Stars codecov

go-wsc 是一个企业级 Go WebSocket 框架,专注于高性能实时通信。提供智能重连、消息确认(ACK)、连接池管理等关键特性,支持百万级并发连接。

🏗️ 系统架构

graph TB
    subgraph "客户端层 Client Layer"
        direction LR
        WSC[WebSocket 客户端<br/>go-wsc]
        TSC[TypeScript 客户端<br/>Advanced WebSocket]
        React[React Hook]
        Vue[Vue.js 组合式 API]
        Angular[Angular Service]
    end

    subgraph "负载均衡层 Load Balancer Layer"
        direction LR
        LB[Nginx/HAProxy<br/>IP Hash 会话保持]
        Gateway[API 网关<br/>认证/限流]
    end

    subgraph "分布式 Hub 集群 Distributed Hub Cluster"
        direction LR
        Hub1[Hub Node 1<br/>192.168.1.101:8080]
        Hub2[Hub Node 2<br/>192.168.1.102:8080]
        Hub3[Hub Node 3<br/>192.168.1.103:8080]
        HubN[Hub Node N<br/>192.168.1.10N:8080]
    end

    subgraph "核心服务层 Core Services Layer"
        direction LR

        subgraph "连接管理"
            ConnRegistry[连接注册中心]
            NodeDiscovery[节点发现]
        end

        subgraph "消息路由"
            MsgRouter[消息路由器]
            CrossNodeRouter[跨节点路由]
        end

        subgraph "分布式通信"
            PubSub[Redis PubSub<br/>消息总线]
            BroadcastMgr[全局广播]
        end
    end

    subgraph "可靠性层 Reliability Layer"
        direction LR

        subgraph "消息确认"
            ACKMgr[ACK 管理器]
            MsgRecord[消息记录]
        end

        subgraph "失败处理"
            RetryEngine[重试引擎]
            FailureRouter[失败路由器]
        end

        subgraph "离线处理"
            OfflineHandler[离线处理器]
            QueueHandler[队列处理器]
        end
    end

    subgraph "性能与监控层 Performance & Monitoring Layer"
        direction LR

        subgraph "性能优化"
            AtomicOps[原子操作]
            WorkerPool[协程池]
        end

        subgraph "监控告警"
            MetricsCol[指标收集]
            AlertMgr[告警管理]
        end

        subgraph "配置管理"
            ConfigMgr[配置中心]
            NodeConfig[节点配置]
        end
    end

    subgraph "存储层 Storage Layer"
        direction LR
        RedisCluster[(Redis Cluster<br/>缓存/队列/PubSub)]
        Database[(Database<br/>离线消息/状态)]
        LogStore[(日志存储<br/>审计追踪)]
    end

    %% 客户端到负载均衡
    WSC -.->|WebSocket| LB
    TSC -.->|WebSocket| LB
    React --> TSC
    Vue --> TSC
    Angular --> TSC

    %% 负载均衡到 Hub 集群
    LB --> Gateway
    Gateway --> Hub1
    Gateway --> Hub2
    Gateway --> Hub3
    Gateway --> HubN

    %% Hub 到核心服务
    Hub1 --> ConnRegistry
    Hub2 --> ConnRegistry
    Hub3 --> ConnRegistry
    HubN --> ConnRegistry

    ConnRegistry --> MsgRouter
    NodeDiscovery --> MsgRouter
    MsgRouter --> CrossNodeRouter

    %% 分布式通信
    CrossNodeRouter --> PubSub
    BroadcastMgr --> PubSub
    Hub1 <-.->|订阅/发布| PubSub
    Hub2 <-.->|订阅/发布| PubSub
    Hub3 <-.->|订阅/发布| PubSub
    HubN <-.->|订阅/发布| PubSub

    %% 可靠性流程
    MsgRouter --> ACKMgr
    ACKMgr --> MsgRecord
    MsgRouter --> RetryEngine
    RetryEngine --> FailureRouter
    FailureRouter --> OfflineHandler
    FailureRouter --> QueueHandler

    %% 性能与监控
    MsgRouter --> AtomicOps
    MsgRouter --> WorkerPool
    Hub1 --> MetricsCol
    Hub2 --> MetricsCol
    Hub3 --> MetricsCol
    HubN --> MetricsCol
    MetricsCol --> AlertMgr
    ConfigMgr --> RetryEngine
    ConfigMgr --> NodeConfig

    %% 存储连接
    PubSub -.->|消息总线| RedisCluster
    ACKMgr -.->|缓存| RedisCluster
    ConnRegistry -.->|映射| RedisCluster
    NodeDiscovery -.->|注册| RedisCluster
    OfflineHandler --> Database
    QueueHandler --> Database
    MsgRecord --> LogStore

    %% 样式定义
    classDef clientStyle fill:#e1f5fe,stroke:#01579b,stroke-width:2px
    classDef lbStyle fill:#fff9c4,stroke:#f57f17,stroke-width:2px
    classDef hubStyle fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
    classDef coreStyle fill:#e8eaf6,stroke:#283593,stroke-width:2px
    classDef reliabilityStyle fill:#ffebee,stroke:#c62828,stroke-width:2px
    classDef perfStyle fill:#fff3e0,stroke:#e65100,stroke-width:2px
    classDef storageStyle fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px

    class WSC,TSC,React,Vue,Angular clientStyle
    class LB,Gateway lbStyle
    class Hub1,Hub2,Hub3,HubN hubStyle
    class ConnRegistry,NodeDiscovery,MsgRouter,CrossNodeRouter,PubSub,BroadcastMgr coreStyle
    class ACKMgr,MsgRecord,RetryEngine,FailureRouter,OfflineHandler,QueueHandler reliabilityStyle
    class AtomicOps,WorkerPool,MetricsCol,AlertMgr,ConfigMgr,NodeConfig perfStyle
    class RedisCluster,Database,LogStore storageStyle
架构特点
  • 分布式集群: 多节点 Hub 集群 + Redis PubSub 消息总线 + 自动节点发现
  • 负载均衡: Nginx/HAProxy IP Hash 会话保持 + 智能流量分发
  • 跨节点通信:
    • 同节点通信: 内存直达,延迟 < 1ms
    • 跨节点通信: Redis PubSub,延迟 5-10ms
    • 全局广播: 自动同步到所有节点
  • 高可靠性: ACK 确认机制 + 消息记录 + 离线处理 + 智能重试
  • 失败处理: 5类专业化失败处理器 + go-toolbox重试引擎
  • 配置统一: go-config/wsc 统一管理重试参数、错误分类和节点配置
  • 高性能: 原子操作 + 动态队列 + 协程池优化
  • 可观测: 全链路监控 + 实时告警 + 可视化面板
  • 水平扩展: 无状态设计 + 弹性伸缩 + 节点自动注册/心跳
  • 高可用: 节点故障自动恢复 + 客户端自动重连 + 会话保持

✨ 核心特性

🎯 客户端能力
  • 智能重连:指数退避 + 抖动算法
  • 消息类型:文本/二进制/Ping/Pong等103种
  • 状态管理:连接生命周期跟踪
  • 缓冲机制:可配置消息队列
🏢 服务端能力
  • 高并发:百万级连接支持
  • 消息路由:点对点/群组/广播
  • ACK 确认:可靠消息传输
  • 性能监控:实时指标统计
🔄 失败处理与重试
  • 智能重试:基于 go-toolbox 的重试引擎,支持指数退避
  • 失败分类:5类专业化失败处理器(通用/队列满/离线/连接错误/超时)
  • 配置驱动:通过 go-config/wsc 统一管理重试参数
  • 详细记录:完整的重试尝试历史和性能指标
📊 配置管理
  • 统一配置:go-config/wsc 包统一管理所有 WebSocket 相关配置
  • 重试参数:MaxRetries、BaseDelay、BackoffFactor 灵活配置
  • 错误分类:RetryableErrors 和 NonRetryableErrors 智能分类
  • 热更新:支持运行时配置更新和生效

📚 文档导航

📖 核心文档
🔧 集成指南
📋 API 参考

📦 安装

go get github.com/kamalyes/go-wsc

系统要求: Go 1.20+ | 支持 Linux/Windows/macOS

🚀 快速开始

🎮 交互式演示(推荐)

最快的上手方式!运行完整的交互式 demo,体验客户端和服务端的实时通信:

# 1. 启动演示服务器
cd examples/demo
go run server.go

演示特点:

  • ✅ 服务端自动发送欢迎消息
  • ✅ 服务端回复客户端消息
  • ✅ 完整的双向通信流程
完整示例代码

所有示例代码都在 examples/ 目录中,可以直接运行:

📖 详细文档:

⚡ 性能表现

  • 吞吐量: 720万条消息/秒
  • 客户端注册: ~2,430 ns/op
  • 消息发送: ~138 ns/op
  • 并发连接: 百万级支持

📊 详细分析: 查看 性能优化指南 获取调优建议

🧪 测试与质量

测试覆盖
  • 测试用例: 880个(2个跳过)
  • 通过率: 100%
  • 覆盖范围: 单元测试 + 集成测试 + 竞态检测
  • 基准测试: 性能回归保护
持续集成
# 运行所有测试
go test ./... -v

# 运行基准测试
go test -bench=. -benchmem

# 竞态检测
go test -race ./...

# 生成覆盖报告
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out
go test -v ./... -timeout 5m 2>&1 | Select-String -Pattern "(FAIL|ERROR|panic)" -Context 1,0
gotestsum -f testname -- ./... -race -count=1 -timeout=30m -coverprofile=coverage.txt -covermode=atomic -shuffle=on | Select-String -Pattern "(FAIL|ERROR|panic|fatal)"

📋 测试报告: 查看 测试覆盖报告 了解详细测试情况

💼 企业特性

生产环境支持
  • 监控集成: Prometheus/Grafana 指标导出
  • 日志标准: 结构化日志 (JSON) 输出
  • 优雅关闭: 平滑连接迁移和资源清理
  • 健康检查: HTTP 端点支持负载均衡器探测
分布式架构
  • 零侵入部署: 现有代码无需修改,自动支持分布式
  • 节点发现: 自动服务注册、心跳检测和节点发现
  • 智能路由:
    • 同节点通信: 内存直达,延迟 < 1ms
    • 跨节点通信: Redis PubSub,延迟 5-10ms
    • 自动路由到用户所在节点
  • 全局广播: 自动同步到所有节点的所有客户端
  • 会话保持: Nginx IP Hash 保证用户连接稳定性
  • 故障转移: 节点故障自动检测和客户端自动重连
  • 水平扩展: 无状态设计支持弹性伸缩,线性扩展并发能力
  • 高可用: 多节点冗余 + 自动故障恢复 + 负载均衡

📘 详细文档: 查看 分布式架构指南K8s 部署指南

🤝 社区与支持

获取帮助
贡献指南
  1. Fork 项目并创建特性分支
  2. 添加测试用例确保代码质量
  3. 更新文档说明变更内容
  4. 提交 Pull Request 等待代码审查

📄 许可证

本项目采用 MIT 许可证 开源。

📌 Commit Emoji 图例

在本项目的提交记录中,我们使用以下 emoji 标记不同类型的变更:

Emoji 类型 说明
🔥 feat 新增功能或重大重构
🐛 fix Bug 修复
add 添加新模块/文件
📊 data 连接记录、数据持久化
📈 stats 统计信息、监控指标
📮 queue 消息队列相关
💾 database 数据库、GORM 相关
📦 storage 离线消息、存储层
🟢 status 在线状态管理
⚖️ balance 负载管理、负载均衡
🗑️ remove 移除文件、清理代码
test 修复测试、测试相关
perf 性能优化
📝 docs 文档更新
🎨 style 代码格式、样式调整
♻️ refactor 代码重构
🔒 security 安全相关
🚀 deploy 部署、发布相关

⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!

Documentation

Overview

* @Author: kamalyes 501893067@qq.com * @Date: 2025-12-28 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-12-29 21:20:20 * @FilePath: \go-wsc\exports_models.go * @Description: Models模块类型导出 - 保持向后兼容 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.

Index

Constants

View Source
const (
	SystemGroupAgents    = models.SystemGroupAgents    // 客服系统组(每命名空间一个)
	SystemGroupObservers = models.SystemGroupObservers // 观察者系统组(全局 namespace="" 或命名空间级)
)

系统保留组常量(__ 前缀,业务组禁止使用) agent 连接自动加入 __agents__,observer 连接自动加入 __observers__ 本地分片索引(agentShards/observerShards)保留做 O(1) 缓存, Redis 系统组用于跨节点共享成员关系与显式广播

View Source
const (
	ContextKeyUserID   = hub.ContextKeyUserID
	ContextKeySenderID = hub.ContextKeySenderID
)

常量导出

View Source
const (
	UserRoleCustomer = models.UserRoleCustomer
	UserRoleAgent    = models.UserRoleAgent
	UserRoleAdmin    = models.UserRoleAdmin
)

==================== 枚举常量 - UserRole ====================

View Source
const (
	UserTypeVisitor  = models.UserTypeVisitor
	UserTypeCustomer = models.UserTypeCustomer
	UserTypeAgent    = models.UserTypeAgent
	UserTypeAdmin    = models.UserTypeAdmin
	UserTypeBot      = models.UserTypeBot
	UserTypeVIP      = models.UserTypeVIP
	UserTypeSystem   = models.UserTypeSystem
	UserTypeObserver = models.UserTypeObserver
)

==================== 枚举常量 - UserType ====================

View Source
const (
	UserStatusOnline    = models.UserStatusOnline
	UserStatusOffline   = models.UserStatusOffline
	UserStatusBusy      = models.UserStatusBusy
	UserStatusAway      = models.UserStatusAway
	UserStatusInvisible = models.UserStatusInvisible
)

==================== 枚举常量 - UserStatus ====================

View Source
const (
	DisconnectReasonReadError      = models.DisconnectReasonReadError
	DisconnectReasonWriteError     = models.DisconnectReasonWriteError
	DisconnectReasonContextDone    = models.DisconnectReasonContextDone
	DisconnectReasonCloseMessage   = models.DisconnectReasonCloseMessage
	DisconnectReasonHeartbeatFail  = models.DisconnectReasonHeartbeatFail
	DisconnectReasonKickOut        = models.DisconnectReasonKickOut
	DisconnectReasonForceOffline   = models.DisconnectReasonForceOffline
	DisconnectReasonTimeout        = models.DisconnectReasonTimeout
	DisconnectReasonClientRequest  = models.DisconnectReasonClientRequest
	DisconnectReasonServerShutdown = models.DisconnectReasonServerShutdown
	DisconnectReasonUnknown        = models.DisconnectReasonUnknown
)

==================== 枚举常量 - DisconnectReason ====================

View Source
const (
	ErrorSeverityInfo     = models.ErrorSeverityInfo
	ErrorSeverityWarning  = models.ErrorSeverityWarning
	ErrorSeverityError    = models.ErrorSeverityError
	ErrorSeverityCritical = models.ErrorSeverityCritical
	ErrorSeverityFatal    = models.ErrorSeverityFatal
)

==================== 枚举常量 - ErrorSeverity ====================

View Source
const (
	QueueTypeBroadcast    = models.QueueTypeBroadcast
	QueueTypePending      = models.QueueTypePending
	QueueTypeAllQueues    = models.QueueTypeAllQueues
	QueueTypeMessageQueue = models.QueueTypeMessageQueue
	QueueTypeClientBuffer = models.QueueTypeClientBuffer
)

==================== 枚举常量 - QueueType ====================

View Source
const (
	MessageStatusPending   = models.MessageStatusPending
	MessageStatusSent      = models.MessageStatusSent
	MessageStatusDelivered = models.MessageStatusDelivered
	MessageStatusRead      = models.MessageStatusRead
	MessageStatusFailed    = models.MessageStatusFailed
)

==================== 枚举常量 - MessageStatus ====================

View Source
const (
	NodeStatusActive   = models.NodeStatusActive
	NodeStatusInactive = models.NodeStatusInactive
	NodeStatusOffline  = models.NodeStatusOffline
)

==================== 枚举常量 - NodeStatus ====================

View Source
const (
	ConnectionStatusConnecting   = models.ConnectionStatusConnecting
	ConnectionStatusConnected    = models.ConnectionStatusConnected
	ConnectionStatusDisconnected = models.ConnectionStatusDisconnected
	ConnectionStatusReconnecting = models.ConnectionStatusReconnecting
	ConnectionStatusError        = models.ConnectionStatusError
)

==================== 枚举常量 - ConnectionStatus ====================

View Source
const (
	OperationTypeJoin      = models.OperationTypeJoin
	OperationTypeLeave     = models.OperationTypeLeave
	OperationTypeMessage   = models.OperationTypeMessage
	OperationTypeBroadcast = models.OperationTypeBroadcast
	OperationTypeNotify    = models.OperationTypeNotify
	OperationTypeHeartbeat = models.OperationTypeHeartbeat
	OperationTypeAuth      = models.OperationTypeAuth
	OperationTypeSync      = models.OperationTypeSync
)

==================== 枚举常量 - OperationType ====================

View Source
const (
	ClientTypeWeb     = models.ClientTypeWeb
	ClientTypeMobile  = models.ClientTypeMobile
	ClientTypeDesktop = models.ClientTypeDesktop
	ClientTypeAPI     = models.ClientTypeAPI
)

==================== 枚举常量 - ClientType ====================

View Source
const (
	ConnectionTypeWebSocket = models.ConnectionTypeWebSocket
	ConnectionTypeSSE       = models.ConnectionTypeSSE
)

==================== 枚举常量 - ConnectionType ====================

View Source
const (
	PriorityLow      = models.PriorityLow
	PriorityNormal   = models.PriorityNormal
	PriorityHigh     = models.PriorityHigh
	PriorityUrgent   = models.PriorityUrgent
	PriorityCritical = models.PriorityCritical
)

==================== 枚举常量 - Priority ====================

View Source
const (
	DepartmentSales     = models.DepartmentSales
	DepartmentSupport   = models.DepartmentSupport
	DepartmentBilling   = models.DepartmentBilling
	DepartmentGeneral   = models.DepartmentGeneral
	DepartmentTechnical = models.DepartmentTechnical
)

==================== 枚举常量 - Department ====================

View Source
const (
	SkillTechnical  = models.SkillTechnical
	SkillSales      = models.SkillSales
	SkillBilling    = models.SkillBilling
	SkillGeneral    = models.SkillGeneral
	SkillLanguageEN = models.SkillLanguageEN
	SkillLanguageZH = models.SkillLanguageZH
	SkillVIP        = models.SkillVIP
)

==================== 枚举常量 - Skill ====================

View Source
const (
	PushTypeNone    = models.PushTypeNone
	PushTypeDirect  = models.PushTypeDirect
	PushTypeQueue   = models.PushTypeQueue
	PushTypeOffline = models.PushTypeOffline
	PushTypeUnicast = models.PushTypeUnicast
)

==================== 枚举常量 - PushType ====================

View Source
const (
	BroadcastTypeNone    = models.BroadcastTypeNone
	BroadcastTypeSession = models.BroadcastTypeSession
	BroadcastTypeGlobal  = models.BroadcastTypeGlobal
)

==================== 枚举常量 - BroadcastType ====================

View Source
const (
	VIPLevelV0 = models.VIPLevelV0
	VIPLevelV1 = models.VIPLevelV1
	VIPLevelV2 = models.VIPLevelV2
	VIPLevelV3 = models.VIPLevelV3
	VIPLevelV4 = models.VIPLevelV4
	VIPLevelV5 = models.VIPLevelV5
	VIPLevelV6 = models.VIPLevelV6
	VIPLevelV7 = models.VIPLevelV7
	VIPLevelV8 = models.VIPLevelV8
)

==================== 枚举常量 - VIPLevel ====================

View Source
const (
	UrgencyLevelLow    = models.UrgencyLevelLow
	UrgencyLevelNormal = models.UrgencyLevelNormal
	UrgencyLevelHigh   = models.UrgencyLevelHigh
)

==================== 枚举常量 - UrgencyLevel ====================

View Source
const (
	BusinessCategoryGeneral    = models.BusinessCategoryGeneral
	BusinessCategoryCustomer   = models.BusinessCategoryCustomer
	BusinessCategorySales      = models.BusinessCategorySales
	BusinessCategoryTechnical  = models.BusinessCategoryTechnical
	BusinessCategoryFinance    = models.BusinessCategoryFinance
	BusinessCategorySecurity   = models.BusinessCategorySecurity
	BusinessCategoryOperations = models.BusinessCategoryOperations
	BusinessCategorySupport    = models.BusinessCategorySupport
	BusinessCategoryIT         = models.BusinessCategoryIT
	BusinessCategoryQuality    = models.BusinessCategoryQuality
	BusinessCategoryOther      = models.BusinessCategoryOther
)

==================== 枚举常量 - BusinessCategory ====================

View Source
const (
	MessageTypeText                 = models.MessageTypeText
	MessageTypeImage                = models.MessageTypeImage
	MessageTypeFile                 = models.MessageTypeFile
	MessageTypeAudio                = models.MessageTypeAudio
	MessageTypeVideo                = models.MessageTypeVideo
	MessageTypeSystem               = models.MessageTypeSystem
	MessageTypeNotice               = models.MessageTypeNotice
	MessageTypeEvent                = models.MessageTypeEvent
	MessageTypeAck                  = models.MessageTypeAck
	MessageTypeLocation             = models.MessageTypeLocation
	MessageTypeCard                 = models.MessageTypeCard
	MessageTypeEmoji                = models.MessageTypeEmoji
	MessageTypeSticker              = models.MessageTypeSticker
	MessageTypeLink                 = models.MessageTypeLink
	MessageTypeQuote                = models.MessageTypeQuote
	MessageTypeForward              = models.MessageTypeForward
	MessageTypeCommand              = models.MessageTypeCommand
	MessageTypeMarkdown             = models.MessageTypeMarkdown
	MessageTypeRichText             = models.MessageTypeRichText
	MessageTypeCode                 = models.MessageTypeCode
	MessageTypeJson                 = models.MessageTypeJson
	MessageTypeXML                  = models.MessageTypeXML
	MessageTypeBinary               = models.MessageTypeBinary
	MessageTypeVoice                = models.MessageTypeVoice
	MessageTypeGIF                  = models.MessageTypeGIF
	MessageTypeDocument             = models.MessageTypeDocument
	MessageTypeSpreadsheet          = models.MessageTypeSpreadsheet
	MessageTypePresentation         = models.MessageTypePresentation
	MessageTypeContact              = models.MessageTypeContact
	MessageTypeCalendar             = models.MessageTypeCalendar
	MessageTypeTask                 = models.MessageTypeTask
	MessageTypePoll                 = models.MessageTypePoll
	MessageTypeForm                 = models.MessageTypeForm
	MessageTypePayment              = models.MessageTypePayment
	MessageTypeOrder                = models.MessageTypeOrder
	MessageTypeProduct              = models.MessageTypeProduct
	MessageTypeInvite               = models.MessageTypeInvite
	MessageTypeAnnouncement         = models.MessageTypeAnnouncement
	MessageTypeAlert                = models.MessageTypeAlert
	MessageTypeError                = models.MessageTypeError
	MessageTypeInfo                 = models.MessageTypeInfo
	MessageTypeSuccess              = models.MessageTypeSuccess
	MessageTypeWarning              = models.MessageTypeWarning
	MessageTypeHeartbeat            = models.MessageTypeHeartbeat
	MessageTypePing                 = models.MessageTypePing
	MessageTypePong                 = models.MessageTypePong
	MessageTypeTyping               = models.MessageTypeTyping
	MessageTypeRead                 = models.MessageTypeRead
	MessageTypeDelivered            = models.MessageTypeDelivered
	MessageTypeRecall               = models.MessageTypeRecall
	MessageTypeEdit                 = models.MessageTypeEdit
	MessageTypeReaction             = models.MessageTypeReaction
	MessageTypeThread               = models.MessageTypeThread
	MessageTypeReply                = models.MessageTypeReply
	MessageTypeMention              = models.MessageTypeMention
	MessageTypeCustom               = models.MessageTypeCustom
	MessageTypeUnknown              = models.MessageTypeUnknown
	MessageTypeTicketCreated        = models.MessageTypeTicketCreated
	MessageTypeTicketAssigned       = models.MessageTypeTicketAssigned
	MessageTypeTicketClosed         = models.MessageTypeTicketClosed
	MessageTypeTicketTimeoutClosed  = models.MessageTypeTicketTimeoutClosed
	MessageTypeTicketTransfer       = models.MessageTypeTicketTransfer
	MessageTypeTicketActive         = models.MessageTypeTicketActive
	MessageTypeTest                 = models.MessageTypeTest
	MessageTypeWelcome              = models.MessageTypeWelcome
	MessageTypeTerminate            = models.MessageTypeTerminate
	MessageTypeTransferred          = models.MessageTypeTransferred
	MessageTypeSessionCreated       = models.MessageTypeSessionCreated
	MessageTypeSessionClosed        = models.MessageTypeSessionClosed
	MessageTypeSessionQueued        = models.MessageTypeSessionQueued
	MessageTypeSessionTimeout       = models.MessageTypeSessionTimeout
	MessageTypeSessionPaused        = models.MessageTypeSessionPaused
	MessageTypeSessionResumed       = models.MessageTypeSessionResumed
	MessageTypeSessionTransferred   = models.MessageTypeSessionTransferred
	MessageTypeSessionMemberJoined  = models.MessageTypeSessionMemberJoined
	MessageTypeSessionMemberLeft    = models.MessageTypeSessionMemberLeft
	MessageTypeSessionStatusChanged = models.MessageTypeSessionStatusChanged
	MessageTypeCheckUserStatus      = models.MessageTypeCheckUserStatus
	MessageTypeUserStatusResponse   = models.MessageTypeUserStatusResponse
	MessageTypeGetOnlineUsers       = models.MessageTypeGetOnlineUsers
	MessageTypeOnlineUsersList      = models.MessageTypeOnlineUsersList
	MessageTypeGetUserInfo          = models.MessageTypeGetUserInfo
	MessageTypeUserInfoResponse     = models.MessageTypeUserInfoResponse
	MessageTypeSystemQuery          = models.MessageTypeSystemQuery
	MessageTypeSystemResponse       = models.MessageTypeSystemResponse
	MessageTypeUserJoined           = models.MessageTypeUserJoined
	MessageTypeUserLeft             = models.MessageTypeUserLeft
	MessageTypeUserStatusChanged    = models.MessageTypeUserStatusChanged
	MessageTypeServerStatus         = models.MessageTypeServerStatus
	MessageTypeServerStats          = models.MessageTypeServerStats
	MessageTypeClientConfig         = models.MessageTypeClientConfig
	MessageTypeConfigUpdate         = models.MessageTypeConfigUpdate
	MessageTypeHealthCheck          = models.MessageTypeHealthCheck
	MessageTypeHealthResponse       = models.MessageTypeHealthResponse
	MessageTypeConnected            = models.MessageTypeConnected
	MessageTypeDisconnected         = models.MessageTypeDisconnected
	MessageTypeReconnected          = models.MessageTypeReconnected
	MessageTypeConnectionError      = models.MessageTypeConnectionError
	MessageTypeConnectionTimeout    = models.MessageTypeConnectionTimeout
	MessageTypeKickOut              = models.MessageTypeKickOut
	MessageTypeForceOffline         = models.MessageTypeForceOffline
	MessageTypeOpenWindow           = models.MessageTypeOpenWindow
	MessageTypeCloseWindow          = models.MessageTypeCloseWindow
	MessageTypeBStatusReminder      = models.MessageTypeBStatusReminder
)

==================== 消息类型常量 (100+ constants) ====================

View Source
const (
	MessagePriorityLow      = models.MessagePriorityLow
	MessagePriorityNormal   = models.MessagePriorityNormal
	MessagePriorityHigh     = models.MessagePriorityHigh
	MessagePriorityUrgent   = models.MessagePriorityUrgent
	MessagePriorityCritical = models.MessagePriorityCritical
)

==================== 消息优先级常量 ====================

View Source
const (
	DataKeyContentExtra = models.DataKeyContentExtra
	DataKeyMetadata     = models.DataKeyMetadata
	DataKeyMediaInfo    = models.DataKeyMediaInfo
)

==================== 消息常量 ====================

View Source
const (
	MessageSendStatusPending     = models.MessageSendStatusPending
	MessageSendStatusSending     = models.MessageSendStatusSending
	MessageSendStatusSuccess     = models.MessageSendStatusSuccess
	MessageSendStatusFailed      = models.MessageSendStatusFailed
	MessageSendStatusRetrying    = models.MessageSendStatusRetrying
	MessageSendStatusAckTimeout  = models.MessageSendStatusAckTimeout
	MessageSendStatusUserOffline = models.MessageSendStatusUserOffline
	MessageSendStatusExpired     = models.MessageSendStatusExpired

	FailureReasonQueueFull    = models.FailureReasonQueueFull
	FailureReasonUserOffline  = models.FailureReasonUserOffline
	FailureReasonConnError    = models.FailureReasonConnError
	FailureReasonAckTimeout   = models.FailureReasonAckTimeout
	FailureReasonSendTimeout  = models.FailureReasonSendTimeout
	FailureReasonNetworkError = models.FailureReasonNetworkError
	FailureReasonUnknown      = models.FailureReasonUnknown
	FailureReasonMaxRetry     = models.FailureReasonMaxRetry
	FailureReasonExpired      = models.FailureReasonExpired

	QueryMessageIDWhere   = models.QueryMessageIDWhere
	OrderByCreateTimeDesc = models.OrderByCreateTimeDesc
	OrderByCreateTimeAsc  = models.OrderByCreateTimeAsc
	OrderByExpiresAtAsc   = models.OrderByExpiresAtAsc
)

==================== 消息记录相关常量 ====================

View Source
const (
	WorkloadDimensionRealtime = models.WorkloadDimensionRealtime // 实时(无过期)
	WorkloadDimensionHourly   = models.WorkloadDimensionHourly   // 小时(保留7天)
	WorkloadDimensionDaily    = models.WorkloadDimensionDaily    // 日(保留90天)
	WorkloadDimensionMonthly  = models.WorkloadDimensionMonthly  // 月(保留13个月)
	WorkloadDimensionYearly   = models.WorkloadDimensionYearly   // 年(保留5年)
)

导出所有维度常量

View Source
const (
	// 基础错误恢复类型
	ErrorTypeConnection    = models.ErrorTypeConnection
	ErrorTypeMessage       = models.ErrorTypeMessage
	ErrorTypeSystem        = models.ErrorTypeSystem
	ErrorTypeNetwork       = models.ErrorTypeNetwork
	ErrorTypeConcurrency   = models.ErrorTypeConcurrency
	ErrorTypeMemory        = models.ErrorTypeMemory
	ErrorTypeConfiguration = models.ErrorTypeConfiguration

	// 连接相关错误
	ErrTypeConnectionClosed   = models.ErrTypeConnectionClosed
	ErrTypeConnectionReset    = models.ErrTypeConnectionReset
	ErrTypeConnectionTimeout  = models.ErrTypeConnectionTimeout
	ErrTypeNetworkUnreachable = models.ErrTypeNetworkUnreachable
	ErrTypeServiceUnavailable = models.ErrTypeServiceUnavailable

	// 队列和缓冲区错误
	ErrTypeQueueFull           = models.ErrTypeQueueFull
	ErrTypeMessageBufferFull   = models.ErrTypeMessageBufferFull
	ErrTypePendingQueueFull    = models.ErrTypePendingQueueFull
	ErrTypeQueueAndPendingFull = models.ErrTypeQueueAndPendingFull

	// 用户和认证错误
	ErrTypeUserOffline          = models.ErrTypeUserOffline
	ErrTypeUserNotFound         = models.ErrTypeUserNotFound
	ErrTypePermissionDenied     = models.ErrTypePermissionDenied
	ErrTypeAuthenticationFailed = models.ErrTypeAuthenticationFailed
	ErrTypeUnauthorized         = models.ErrTypeUnauthorized

	// 消息错误
	ErrTypeInvalidMessageFormat   = models.ErrTypeInvalidMessageFormat
	ErrTypeMessageTooLarge        = models.ErrTypeMessageTooLarge
	ErrTypeMessageTargetMissing   = models.ErrTypeMessageTargetMissing
	ErrTypeMessageFiltered        = models.ErrTypeMessageFiltered
	ErrTypeMessageDeliveryTimeout = models.ErrTypeMessageDeliveryTimeout

	// 客户端错误
	ErrTypeClientNotFound     = models.ErrTypeClientNotFound
	ErrTypeClientDisconnected = models.ErrTypeClientDisconnected
	ErrTypeNoAvailableAgents  = models.ErrTypeNoAvailableAgents

	// 集线器操作错误
	ErrTypeHubStartupTimeout  = models.ErrTypeHubStartupTimeout
	ErrTypeHubShutdownTimeout = models.ErrTypeHubShutdownTimeout
	ErrTypeHubNotRunning      = models.ErrTypeHubNotRunning
	ErrTypeCircuitBreakerOpen = models.ErrTypeCircuitBreakerOpen

	// 记录管理错误
	ErrTypeRecordManagerDisabled        = models.ErrTypeRecordManagerDisabled
	ErrTypeMessageRecordNotFound        = models.ErrTypeMessageRecordNotFound
	ErrTypeMessageAlreadySent           = models.ErrTypeMessageAlreadySent
	ErrTypeMaxRetriesExceeded           = models.ErrTypeMaxRetriesExceeded
	ErrTypeRecordManagerNotInitialized  = models.ErrTypeRecordManagerNotInitialized
	ErrTypeMaxRetriesExceededForMessage = models.ErrTypeMaxRetriesExceededForMessage
	ErrTypeRecordRepositoryNotSet       = models.ErrTypeRecordRepositoryNotSet
	ErrTypeOnlineStatusRepositoryNotSet = models.ErrTypeOnlineStatusRepositoryNotSet
	ErrTypeStatsRepositoryNotSet        = models.ErrTypeStatsRepositoryNotSet

	// 速率限制错误
	ErrTypeRateLimitExceeded     = models.ErrTypeRateLimitExceeded
	ErrTypeFrequencyLimitReached = models.ErrTypeFrequencyLimitReached

	// 操作错误
	ErrTypeOperationTimeout = models.ErrTypeOperationTimeout
	ErrTypeTemporaryFailure = models.ErrTypeTemporaryFailure
	ErrTypeResourceBusy     = models.ErrTypeResourceBusy
	ErrTypeUnknownError     = models.ErrTypeUnknownError

	// ACK相关错误
	ErrTypeAckTimeout        = models.ErrTypeAckTimeout
	ErrTypeAckTimeoutRetries = models.ErrTypeAckTimeoutRetries
	ErrTypeContextCancelled  = models.ErrTypeContextCancelled

	// 配置相关错误
	ErrTypeConfigValidatorNotInitialized = models.ErrTypeConfigValidatorNotInitialized
	ErrTypeConfigValidationFailed        = models.ErrTypeConfigValidationFailed
	ErrTypeConfigAutoFixFailed           = models.ErrTypeConfigAutoFixFailed

	// 安全相关错误
	ErrTypeIPInBlacklist      = models.ErrTypeIPInBlacklist
	ErrTypeBruteForceDetected = models.ErrTypeBruteForceDetected
	ErrTypeThreatDetected     = models.ErrTypeThreatDetected
	ErrTypeAccessDeniedByRule = models.ErrTypeAccessDeniedByRule

	// PubSub相关错误
	ErrTypePubSubNotSet           = models.ErrTypePubSubNotSet
	ErrTypePubSubPublishFailed    = models.ErrTypePubSubPublishFailed
	ErrTypeEventSerializeFailed   = models.ErrTypeEventSerializeFailed
	ErrTypeEventDeserializeFailed = models.ErrTypeEventDeserializeFailed

	// 错误消息格式常量
	ErrMsgClientIDFormat   = models.ErrMsgClientIDFormat
	ErrMsgDecompressFailed = models.ErrMsgDecompressFailed
)

==================== 错误类型常量 ====================

View Source
const (
	// 事件类型
	EventUserOnline             = models.EventUserOnline
	EventUserOffline            = models.EventUserOffline
	EventTicketQueuePushed      = models.EventTicketQueuePushed
	EventTicketAssigned         = models.EventTicketAssigned
	EventTicketAssignmentFailed = models.EventTicketAssignmentFailed

	// 事件状态
	EventTypeOnline  = models.EventTypeOnline
	EventTypeOffline = models.EventTypeOffline
)

==================== 事件类型常量 ====================

View Source
const (
	AckStatusPending   = protocol.AckStatusPending
	AckStatusConfirmed = protocol.AckStatusConfirmed
	AckStatusTimeout   = protocol.AckStatusTimeout
	AckStatusFailed    = protocol.AckStatusFailed
)

AckStatus 常量

View Source
const (
	// MessageRoleReceiver 作为接收者查询
	MessageRoleReceiver = repository.MessageRoleReceiver
	// MessageRoleSender 作为发送者查询
	MessageRoleSender = repository.MessageRoleSender
)
View Source
const DefaultNamespace = models.DefaultNamespace

DefaultNamespace 默认命名空间ID(类似 k8s default namespace)

Variables

View Source
var (
	New             = client.New
	NewWebSocket    = client.NewWebSocket
	DefaultUpgrader = client.DefaultUpgrader
	IsNormalClose   = client.IsNormalClose
)
View Source
var (
	// ErrGroupNotFound 群组未找到
	ErrGroupNotFound = models.ErrGroupNotFound
	// ErrGroupMemberExisted 用户已是群组成员
	ErrGroupMemberExisted = models.ErrGroupMemberExisted
	// ErrGroupFull 群组已满
	ErrGroupFull = models.ErrGroupFull
	// ErrGroupRepoNotSet 群组仓库未设置
	ErrGroupRepoNotSet = models.ErrGroupRepoNotSet
	// ErrGroupExisted 群组已存在(同命名空间下 groupID 唯一)
	ErrGroupExisted = models.ErrGroupExisted
	// ErrGroupReserved 群组名为系统保留名(__ 前缀)
	ErrGroupReserved = models.ErrGroupReserved
)
View Source
var (
	NewHub                    = hub.NewHub
	NewConnectionTokenDecoder = hub.NewConnectionTokenDecoder // 创建连接 Token 解码器
	IssueConnectionToken      = hub.IssueConnectionToken      // 生成连接 Token(业务层调用)
	RevokeConnectionToken     = hub.RevokeConnectionToken     // 吊销连接 Token(多节点生效)
)
View Source
var (
	GetAllVIPLevels          = models.GetAllVIPLevels
	GetAllUrgencyLevels      = models.GetAllUrgencyLevels
	GetAllBusinessCategories = models.GetAllBusinessCategories
)

==================== 枚举工具函数 ====================

View Source
var (
	GetAllMessageTypes        = models.GetAllMessageTypes
	GetMessageTypesByCategory = models.GetMessageTypesByCategory
	GetMessageTypesByPriority = models.GetMessageTypesByPriority
	GetPriorityStats          = models.GetPriorityStats
)

==================== 消息工具函数 ====================

View Source
var (
	NewHubMessage = models.NewHubMessage
	NewClient     = models.NewClient
)

==================== 消息工具函数 ====================

View Source
var (
	// 连接相关错误
	ErrConnectionClosed       = models.ErrConnectionClosed
	ErrMessageBufferFull      = models.ErrMessageBufferFull
	ErrHubStartupTimeout      = models.ErrHubStartupTimeout
	ErrHubShutdownTimeout     = models.ErrHubShutdownTimeout
	ErrQueueAndPendingFull    = models.ErrQueueAndPendingFull
	ErrMessageTargetMissing   = models.ErrMessageTargetMissing
	ErrUserOffline            = models.ErrUserOffline
	ErrMessageDeliveryTimeout = models.ErrMessageDeliveryTimeout
	ErrCircuitBreakerOpen     = models.ErrCircuitBreakerOpen

	// ACK相关错误
	ErrAckTimeout        = models.ErrAckTimeout
	ErrAckTimeoutRetries = models.ErrAckTimeoutRetries
	ErrContextCancelled  = models.ErrContextCancelled

	// 记录管理相关错误
	ErrRecordManagerNotInitialized = models.ErrRecordManagerNotInitialized
	ErrMaxRetriesExceeded          = models.ErrMaxRetriesExceeded

	// 配置相关错误
	ErrConfigValidatorNotInitialized = models.ErrConfigValidatorNotInitialized

	// 业务逻辑错误
	ErrMessageFiltered              = models.ErrMessageFiltered
	ErrNoAvailableAgents            = models.ErrNoAvailableAgents
	ErrQueueFull                    = models.ErrQueueFull
	ErrRecordRepositoryNotSet       = models.ErrRecordRepositoryNotSet
	ErrOnlineStatusRepositoryNotSet = models.ErrOnlineStatusRepositoryNotSet
	ErrStatsRepositoryNotSet        = models.ErrStatsRepositoryNotSet

	// PubSub相关错误
	ErrPubSubNotSet           = models.ErrPubSubNotSet
	ErrPubSubPublishFailed    = models.ErrPubSubPublishFailed
	ErrEventSerializeFailed   = models.ErrEventSerializeFailed
	ErrEventDeserializeFailed = models.ErrEventDeserializeFailed

	// 错误判断辅助函数
	IsRetryableError     = models.IsRetryableError
	IsRetryableErrorType = models.IsRetryableErrorType
	IsQueueFullError     = models.IsQueueFullError
	IsUserOfflineError   = models.IsUserOfflineError
	IsSendTimeoutError   = models.IsSendTimeoutError
	IsAckTimeoutError    = models.IsAckTimeoutError
)

==================== 错误变量 ====================

View Source
var (
	UserRoleValidator         = models.UserRoleValidator
	UserTypeValidator         = models.UserTypeValidator
	UserStatusValidator       = models.UserStatusValidator
	DisconnectReasonValidator = models.DisconnectReasonValidator
	ErrorSeverityValidator    = models.ErrorSeverityValidator
	QueueTypeValidator        = models.QueueTypeValidator
	MessageStatusValidator    = models.MessageStatusValidator
	NodeStatusValidator       = models.NodeStatusValidator
	ConnectionStatusValidator = models.ConnectionStatusValidator
	OperationTypeValidator    = models.OperationTypeValidator
	ClientTypeValidator       = models.ClientTypeValidator
	PriorityValidator         = models.PriorityValidator
	DepartmentValidator       = models.DepartmentValidator
	SkillValidator            = models.SkillValidator
	PushTypeValidator         = models.PushTypeValidator
	BroadcastTypeValidator    = models.BroadcastTypeValidator
	VIPLevelValidator         = models.VIPLevelValidator
	UrgencyLevelValidator     = models.UrgencyLevelValidator
	BusinessCategoryValidator = models.BusinessCategoryValidator
)

==================== 验证器 ====================

View Source
var AllWorkloadDimensions = models.AllWorkloadDimensions

AllWorkloadDimensions 所有负载统计维度

View Source
var DefaultRateLimiterConfig = middleware.DefaultRateLimiterConfig

DefaultRateLimiterConfig 默认限流器配置

View Source
var InitLogger = middleware.InitLogger

InitLogger 根据配置初始化日志器

View Source
var IsSystemGroup = models.IsSystemGroup

IsSystemGroup 判断 groupID 是否为系统保留组(__ 前缀)

View Source
var NewAckManager = protocol.NewAckManager

NewAckManager 创建ACK管理器

View Source
var NewAckManagerWithOptions = protocol.NewAckManagerWithOptions

NewAckManagerWithOptions 创建ACK管理器(带选项)

View Source
var NewConnectionRecordRepository = repository.NewConnectionRecordRepository

NewConnectionRecordRepository 创建连接记录仓储

View Source
var NewDefaultWSCLogger = middleware.NewDefaultWSCLogger

NewDefaultWSCLogger 创建默认配置的WSC日志器

View Source
var NewGoRedisRateLimitClient = middleware.NewGoRedisRateLimitClient

NewGoRedisRateLimitClient 创建 go-redis 限流器客户端

View Source
var NewGormOfflineMessageRepository = repository.NewGormOfflineMessageRepository

NewGormOfflineMessageRepository 创建 Gorm 离线消息仓储

View Source
var NewHybridOfflineMessageHandler = handler.NewHybridOfflineMessageHandler

NewHybridOfflineMessageHandler 创建混合离线消息处理器

View Source
var NewMessageRecordRepository = repository.NewMessageRecordRepository

NewMessageRecordRepository 创建消息记录仓储

View Source
var NewRateLimitAlertService = middleware.NewRateLimitAlertService

NewRateLimitAlertService 创建限流告警服务

View Source
var NewRateLimiter = middleware.NewRateLimiter

NewRateLimiter 创建限流器

View Source
var NewRateLimiterConfigFromMessageRateLimit = middleware.NewRateLimiterConfigFromMessageRateLimit

NewRateLimiterConfigFromMessageRateLimit 从 go-config 的 MessageRateLimit 构建限流器配置

View Source
var NewRedisGroupRepository = repository.NewRedisGroupRepository

NewRedisGroupRepository 创建 Redis 群组仓库

View Source
var NewRedisHubStatsRepository = repository.NewRedisHubStatsRepository

NewRedisHubStatsRepository 创建 Redis Hub 统计仓储

View Source
var NewRedisMessageQueueRepository = repository.NewRedisMessageQueueRepository

NewRedisMessageQueueRepository 创建 Redis 消息队列仓储

View Source
var NewRedisOnlineStatusRepository = repository.NewRedisOnlineStatusRepository

NewRedisOnlineStatusRepository 创建 Redis 在线状态仓储

View Source
var NewRedisWorkloadRepository = repository.NewRedisWorkloadRepository

NewRedisWorkloadRepository 创建 Redis 工作负载仓储

View Source
var PublishEvent = events.PublishEvent

PublishEvent 发布自定义事件

View Source
var PublishTicketAssigned = events.PublishTicketAssigned

PublishTicketAssigned 发布工单分配成功事件

View Source
var PublishTicketAssignmentFailed = events.PublishTicketAssignmentFailed

PublishTicketAssignmentFailed 发布工单分配失败事件

View Source
var PublishTicketQueuePushed = events.PublishTicketQueuePushed

PublishTicketQueuePushed 发布工单入队事件

View Source
var PublishUserOffline = events.PublishUserOffline

PublishUserOffline 发布用户下线事件

View Source
var PublishUserOnline = events.PublishUserOnline

PublishUserOnline 发布用户上线事件

View Source
var SubscribeEvent = events.SubscribeEvent

SubscribeEvent 订阅自定义事件

View Source
var SubscribeTicketAssigned = events.SubscribeTicketAssigned

SubscribeTicketAssigned 订阅工单分配成功事件

View Source
var SubscribeTicketAssignmentFailed = events.SubscribeTicketAssignmentFailed

SubscribeTicketAssignmentFailed 订阅工单分配失败事件

View Source
var SubscribeTicketQueuePushed = events.SubscribeTicketQueuePushed

SubscribeTicketQueuePushed 订阅工单入队事件

View Source
var SubscribeUserOffline = events.SubscribeUserOffline

SubscribeUserOffline 订阅用户下线事件

View Source
var SubscribeUserOnline = events.SubscribeUserOnline

SubscribeUserOnline 订阅用户上线事件

Functions

func CleanupTestRedis added in v0.5.7

func CleanupTestRedis(t *testing.T, client *redis.Client)

CleanupTestRedis 清理 Redis 测试数据(可用于测试清理)

func CleanupTestTable added in v0.5.7

func CleanupTestTable(t *testing.T, db *gorm.DB, tableName string)

CleanupTestTable 清理测试表数据(SQLite 兼容,用 DELETE 替代 TRUNCATE)

func GetTestDB added in v0.5.7

func GetTestDB(t *testing.T) *gorm.DB

GetTestDB 获取测试用数据库连接(单例模式) 基于 SQLite 内存数据库(cache=shared 共享),零外部依赖,无需连接真实 MySQL

func GetTestDBWithMigration added in v0.5.7

func GetTestDBWithMigration(t *testing.T, models ...interface{}) *gorm.DB

GetTestDBWithMigration 获取测试用数据库并执行迁移 models: 需要迁移的模型列表,例如 &MessageSendRecord{}, &ConnectionRecord{} 使用缓存机制避免重复迁移相同的模型

func GetTestRedisClient added in v0.5.7

func GetTestRedisClient(t *testing.T) *redis.Client

GetTestRedisClient 获取测试用 Redis 客户端(单例模式) 基于 miniredis 本地内存实例,零外部依赖,无需连接真实 Redis

func GetTestRedisClientWithFlush added in v0.5.7

func GetTestRedisClientWithFlush(t *testing.T) *redis.Client

GetTestRedisClientWithFlush 获取测试用 Redis 客户端并清空测试数据 适用于需要干净环境的测试

func GetTestRedisUniversalClient added in v0.5.7

func GetTestRedisUniversalClient(t *testing.T) redis.UniversalClient

GetTestRedisUniversalClient 获取 Redis UniversalClient(兼容旧代码)

func NewTestRedisClient added in v0.5.7

func NewTestRedisClient(t *testing.T) *redis.Client

NewTestRedisClient 创建新的 Redis 客户端(连同一 miniredis 实例的独立连接) 适用于需要独立连接的测试

func StartTestHub added in v0.5.7

func StartTestHub(t *testing.T, hub *Hub)

StartTestHub 启动测试 Hub 并等待就绪

func SubscribeEventTyped added in v0.5.7

func SubscribeEventTyped[T any](p Publisher, eventTypes []string, handler func(*T) error) (func() error, error)

SubscribeEventTyped 订阅自定义事件(类型安全版本,泛型函数) 由于是泛型函数,需要在调用时指定类型参数 使用示例: wsc.SubscribeEventTyped[MyEventType](publisher, eventTypes, handler)

Types

type AckManager added in v0.2.0

type AckManager = protocol.AckManager

AckManager ACK管理器

type AckMessage added in v0.2.0

type AckMessage = protocol.AckMessage

AckMessage ACK消息结构

type AckStatus added in v0.2.0

type AckStatus = protocol.AckStatus

AckStatus ACK状态

type AfterHeartbeatCallback added in v0.5.7

type AfterHeartbeatCallback = hub.AfterHeartbeatCallback

type AgentWorkloadModel added in v0.5.7

type AgentWorkloadModel = models.AgentWorkloadModel

AgentWorkloadModel 客服负载模型

type AlertTemplateData added in v0.5.4

type AlertTemplateData = middleware.AlertTemplateData

AlertTemplateData 告警模板数据

type BatchSendFailureCallback added in v0.5.7

type BatchSendFailureCallback = hub.BatchSendFailureCallback

type BatchSendResult added in v0.5.7

type BatchSendResult = hub.BatchSendResult

type BatchSender added in v0.5.7

type BatchSender = hub.BatchSender

type BeforeHeartbeatCallback added in v0.5.7

type BeforeHeartbeatCallback = hub.BeforeHeartbeatCallback

type BroadcastResult added in v0.5.0

type BroadcastResult = hub.BroadcastResult

type BroadcastType added in v0.5.7

type BroadcastType = models.BroadcastType

==================== 枚举类型 ====================

type BusinessCategory added in v0.2.1

type BusinessCategory = models.BusinessCategory

==================== 枚举类型 ====================

type Client added in v0.2.0

type Client = hub.Client

type ClientConnectCallback added in v0.5.7

type ClientConnectCallback = hub.ClientConnectCallback

type ClientDisconnectCallback added in v0.5.7

type ClientDisconnectCallback = hub.ClientDisconnectCallback

type ClientMessage added in v0.5.7

type ClientMessage = client.ClientMessage

type ClientType added in v0.1.1

type ClientType = models.ClientType

==================== 枚举类型 ====================

type ClusterStats added in v0.5.0

type ClusterStats = repository.ClusterStats

ClusterStats 集群统计信息

type ConnectionClaims added in v0.9.5

type ConnectionClaims = hub.ConnectionClaims // 连接 Token JWT Claims(user_id/user_type/device_id 加密载体)

type ConnectionRecord added in v0.5.7

type ConnectionRecord = models.ConnectionRecord

==================== 连接模型 ====================

type ConnectionRecordRepository added in v0.5.7

type ConnectionRecordRepository = repository.ConnectionRecordRepository

ConnectionRecordRepository 连接记录仓储接口

type ConnectionStats added in v0.5.7

type ConnectionStats = repository.ConnectionStats

ConnectionStats 连接统计信息

type ConnectionStatus added in v0.1.1

type ConnectionStatus = models.ConnectionStatus

==================== 枚举类型 ====================

type ConnectionTokenDecoder added in v0.9.5

type ConnectionTokenDecoder = hub.ConnectionTokenDecoder // 连接 Token 解码器接口

type ConnectionType added in v0.5.7

type ConnectionType = models.ConnectionType

==================== 枚举类型 ====================

type ContextKey added in v0.2.0

type ContextKey = hub.ContextKey

type Department added in v0.1.1

type Department = models.Department

==================== 枚举类型 ====================

type DisconnectReason added in v0.5.7

type DisconnectReason = models.DisconnectReason

==================== 枚举类型 ====================

type DistributedMessage added in v0.1.1

type DistributedMessage = models.DistributedMessage

==================== 基础类型 ====================

type EmailSender added in v0.5.4

type EmailSender = middleware.EmailSender

EmailSender 邮件发送接口

type ErrorCallback added in v0.5.7

type ErrorCallback = hub.ErrorCallback

type ErrorSeverity added in v0.2.4

type ErrorSeverity = models.ErrorSeverity

==================== 枚举类型 ====================

type ErrorType added in v0.2.4

type ErrorType = models.ErrorType

==================== 错误类型 ====================

type EventStatus added in v0.5.7

type EventStatus = models.EventStatus

==================== 事件相关类型 ====================

type FailureReason added in v0.2.0

type FailureReason = models.FailureReason

==================== 消息和记录 ====================

type GoRedisRateLimitClient added in v0.9.6

type GoRedisRateLimitClient = middleware.GoRedisRateLimitClient

GoRedisRateLimitClient 基于 go-redis 的限流器客户端 实现统一的 RedisClient 接口,单次和批量操作都通过 Pipeline 优化

type GormOfflineMessageRepository added in v0.5.7

type GormOfflineMessageRepository = repository.GormOfflineMessageRepository

GormOfflineMessageRepository Gorm 离线消息仓储实现

type Group added in v0.9.6

type Group = models.Group

Group 群组模型

type GroupRepository added in v0.9.6

type GroupRepository = repository.GroupRepository

GroupRepository 群组仓库接口

type GroupSendResult added in v0.9.6

type GroupSendResult = models.GroupSendResult

GroupSendResult 群组消息投递结果

type HeartbeatReportCallback added in v0.5.7

type HeartbeatReportCallback = hub.HeartbeatReportCallback

type HeartbeatTimeoutCallback added in v0.4.1

type HeartbeatTimeoutCallback = hub.HeartbeatTimeoutCallback

type Hub added in v0.2.0

type Hub = hub.Hub

func CreateTestHub added in v0.5.7

func CreateTestHub(t *testing.T, config *wscconfig.WSC) *Hub

CreateTestHub 创建测试用的 Hub

type HubHealthInfo added in v0.5.7

type HubHealthInfo = hub.HubHealthInfo

type HubMessage added in v0.2.0

type HubMessage = models.HubMessage

==================== 消息和记录 ====================

type HubStats added in v0.2.1

type HubStats = models.HubStats

==================== 基础类型 ====================

type HubStatsRepository added in v0.5.0

type HubStatsRepository = repository.HubStatsRepository

HubStatsRepository Hub 统计信息仓储接口

type HybridOfflineMessageHandler added in v0.5.7

type HybridOfflineMessageHandler = handler.HybridOfflineMessageHandler

HybridOfflineMessageHandler 混合离线消息处理器

type IDGenerator added in v0.5.7

type IDGenerator = models.IDGenerator

==================== 基础类型 ====================

type IncrExpireEntry added in v0.9.6

type IncrExpireEntry = middleware.IncrExpireEntry

IncrExpireEntry 递增条目(用于批量操作)

type KickUserResult added in v0.5.7

type KickUserResult = hub.KickUserResult

type MessageClassification added in v0.2.1

type MessageClassification = models.MessageClassification

==================== 分类相关 ====================

type MessagePriority added in v0.2.1

type MessagePriority = models.MessagePriority

==================== 消息类型 ====================

type MessageQueueRepository added in v0.5.0

type MessageQueueRepository = repository.MessageQueueRepository

MessageQueueRepository 消息队列仓储接口

type MessageReceivedCallback added in v0.5.7

type MessageReceivedCallback = hub.MessageReceivedCallback

type MessageRecordFilter added in v0.2.0

type MessageRecordFilter = repository.MessageRecordFilter

MessageRecordFilter 消息记录查询过滤器

type MessageRecordGormRepository added in v0.5.0

type MessageRecordGormRepository = repository.MessageRecordGormRepository

MessageRecordGormRepository Gorm 消息记录仓储实现

type MessageRecordRepository added in v0.5.0

type MessageRecordRepository = repository.MessageRecordRepository

MessageRecordRepository 消息记录仓储接口

type MessageRole added in v0.5.7

type MessageRole = repository.MessageRole

MessageRole 消息查询角色

type MessageSendCallback added in v0.5.7

type MessageSendCallback = hub.MessageSendCallback

type MessageSendRecord added in v0.2.0

type MessageSendRecord = models.MessageSendRecord

==================== 消息和记录 ====================

type MessageSendStatus added in v0.2.0

type MessageSendStatus = models.MessageSendStatus

==================== 消息和记录 ====================

type MessageStatus added in v0.1.1

type MessageStatus = models.MessageStatus

==================== 枚举类型 ====================

type MessageType added in v0.1.1

type MessageType = models.MessageType

==================== 消息类型 ====================

type NodeConnectionStats added in v0.5.7

type NodeConnectionStats = repository.NodeConnectionStats

NodeConnectionStats 节点连接统计

type NodeInfo added in v0.2.0

type NodeInfo = hub.NodeInfo

type NodeStats added in v0.5.0

type NodeStats = repository.NodeStats

NodeStats 节点统计信息

type NodeStatus added in v0.1.1

type NodeStatus = models.NodeStatus

==================== 枚举类型 ====================

type ObserverManagerStats added in v0.5.7

type ObserverManagerStats = hub.ObserverManagerStats

type ObserverStats added in v0.5.7

type ObserverStats = hub.ObserverStats

type OfflineMessageDBRepository added in v0.5.7

type OfflineMessageDBRepository = repository.OfflineMessageDBRepository

OfflineMessageDBRepository 离线消息数据库仓储接口

type OfflineMessageFilter added in v0.5.7

type OfflineMessageFilter = repository.OfflineMessageFilter

OfflineMessageFilter 离线消息查询过滤器

type OfflineMessageHandler added in v0.2.0

type OfflineMessageHandler = handler.OfflineMessageHandler

OfflineMessageHandler 离线消息处理器接口

type OfflineMessagePushCallback added in v0.5.7

type OfflineMessagePushCallback = hub.OfflineMessagePushCallback

type OfflineMessageRecord added in v0.5.7

type OfflineMessageRecord = repository.OfflineMessageRecord

OfflineMessageRecord 离线消息记录

type OnlineStatusRepository added in v0.5.0

type OnlineStatusRepository = repository.OnlineStatusRepository

OnlineStatusRepository 在线状态仓储接口

type OperationType added in v0.1.1

type OperationType = models.OperationType

==================== 枚举类型 ====================

type PendingMessage added in v0.2.0

type PendingMessage = protocol.PendingMessage

PendingMessage 待确认消息

type PoolManager added in v0.5.4

type PoolManager = hub.PoolManager

type Priority added in v0.1.1

type Priority = models.Priority

==================== 枚举类型 ====================

type PriorityStats added in v0.2.1

type PriorityStats = models.PriorityStats

==================== 消息类型 ====================

type Publisher added in v0.5.7

type Publisher = events.Publisher

Publisher 事件发布器接口别名

type PushType added in v0.5.7

type PushType = models.PushType

==================== 枚举类型 ====================

type QueueFullCallback added in v0.5.7

type QueueFullCallback = hub.QueueFullCallback

type QueueType added in v0.5.7

type QueueType = models.QueueType

==================== 枚举类型 ====================

type RateLimitAlertService added in v0.5.4

type RateLimitAlertService = middleware.RateLimitAlertService

RateLimitAlertService 限流告警服务

type RateLimiter added in v0.5.4

type RateLimiter = middleware.RateLimiter

RateLimiter 限流器

type RateLimiterConfig added in v0.5.4

type RateLimiterConfig = middleware.RateLimiterConfig

RateLimiterConfig 限流器配置

type RedisClient added in v0.5.4

type RedisClient = middleware.RedisClient

RedisClient Redis客户端接口(统一单个和批量操作)

type RedisGroupRepository added in v0.9.6

type RedisGroupRepository = repository.RedisGroupRepository

RedisGroupRepository Redis 群组仓库实现

type RedisHubStatsRepository added in v0.5.0

type RedisHubStatsRepository = repository.RedisHubStatsRepository

RedisHubStatsRepository Redis Hub 统计仓储实现

type RedisMessageQueueRepository added in v0.5.0

type RedisMessageQueueRepository = repository.RedisMessageQueueRepository

RedisMessageQueueRepository Redis 消息队列仓储实现

type RedisOnlineStatusRepository added in v0.5.0

type RedisOnlineStatusRepository = repository.RedisOnlineStatusRepository

RedisOnlineStatusRepository Redis 在线状态仓储实现

type RedisWorkloadRepository added in v0.5.7

type RedisWorkloadRepository = repository.RedisWorkloadRepository

RedisWorkloadRepository Redis 工作负载仓储实现

type RetryAttempt added in v0.2.0

type RetryAttempt = models.RetryAttempt

==================== 消息和记录 ====================

type SendAttempt added in v0.2.1

type SendAttempt = hub.SendAttempt

type SendResult added in v0.2.1

type SendResult = hub.SendResult

type Skill added in v0.1.1

type Skill = models.Skill

==================== 枚举类型 ====================

type TicketAssignedEvent added in v0.5.7

type TicketAssignedEvent = models.TicketAssignedEvent

==================== 事件相关类型 ====================

type TicketAssignedEventHandler added in v0.5.7

type TicketAssignedEventHandler = models.TicketAssignedEventHandler

==================== 事件相关类型 ====================

type TicketAssignmentFailedEvent added in v0.5.7

type TicketAssignmentFailedEvent = models.TicketAssignmentFailedEvent

==================== 事件相关类型 ====================

type TicketAssignmentFailedEventHandler added in v0.5.7

type TicketAssignmentFailedEventHandler = models.TicketAssignmentFailedEventHandler

==================== 事件相关类型 ====================

type TicketQueueEvent added in v0.5.7

type TicketQueueEvent = models.TicketQueueEvent

==================== 事件相关类型 ====================

type TicketQueueEventHandler added in v0.5.7

type TicketQueueEventHandler = models.TicketQueueEventHandler

==================== 事件相关类型 ====================

type UrgencyLevel added in v0.2.1

type UrgencyLevel = models.UrgencyLevel

==================== 枚举类型 ====================

type UserConnectionStats added in v0.5.7

type UserConnectionStats = repository.UserConnectionStats

UserConnectionStats 用户连接统计

type UserResult added in v0.5.7

type UserResult = hub.UserResult

type UserRole added in v0.1.1

type UserRole = models.UserRole

==================== 枚举类型 ====================

type UserStatus added in v0.1.1

type UserStatus = models.UserStatus

==================== 枚举类型 ====================

type UserStatusEvent added in v0.5.7

type UserStatusEvent = models.UserStatusEvent

==================== 事件相关类型 ====================

type UserStatusEventHandler added in v0.5.7

type UserStatusEventHandler = models.UserStatusEventHandler

==================== 事件相关类型 ====================

type UserType added in v0.1.1

type UserType = models.UserType

==================== 枚举类型 ====================

type VIPLevel added in v0.2.1

type VIPLevel = models.VIPLevel

==================== 枚举类型 ====================

type WSCLogger added in v0.2.4

type WSCLogger = logger.ILogger

WSCLogger 日志器类型(直接使用 go-logger.ILogger)

type WebSocket

type WebSocket = client.WebSocket

type WelcomeMessage added in v0.1.1

type WelcomeMessage = models.WelcomeMessage

==================== 模板相关 ====================

type WelcomeMessageProvider added in v0.1.1

type WelcomeMessageProvider = models.WelcomeMessageProvider

==================== 模板相关 ====================

type WelcomeTemplate added in v0.1.1

type WelcomeTemplate = models.WelcomeTemplate

==================== 模板相关 ====================

type WorkloadDimension added in v0.5.7

type WorkloadDimension = models.WorkloadDimension

WorkloadDimension 负载统计维度

type WorkloadInfo added in v0.5.7

type WorkloadInfo = repository.WorkloadInfo

WorkloadInfo 工作负载信息

type WorkloadRepository added in v0.5.7

type WorkloadRepository = repository.WorkloadRepository

WorkloadRepository 工作负载仓储接口

type Wsc

type Wsc = client.Wsc

Directories

Path Synopsis
* @Author: kamalyes 501893067@qq.com * @Date: 2025-09-06 09:50:55 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-12-28 20:01:00 * @FilePath: \go-wsc\client\connection.go * @Description: 连接管理逻辑 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-09-06 09:50:55 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-12-28 20:01:00 * @FilePath: \go-wsc\client\connection.go * @Description: 连接管理逻辑 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
examples
basic-client command
*
*
basic-server command
*
*
demo command
*
*
distributed-server command
*
*
message-send command
*
*
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-02 15:17:56 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-02 15:21:36 * @FilePath: \go-wsc\hub\online_status.go * @Description: Hub 在线状态相关方法 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2026-01-02 15:17:56 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-02 15:21:36 * @FilePath: \go-wsc\hub\online_status.go * @Description: Hub 在线状态相关方法 * * Copyright (c) 2026 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-11-22 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-02 15:22:16 * @FilePath: \go-wsc\middleware\logger.go * @Description: go-wsc 日志接口,直接复用 go-logger * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-11-22 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-01-02 15:22:16 * @FilePath: \go-wsc\middleware\logger.go * @Description: go-wsc 日志接口,直接复用 go-logger * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-02-24 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-02-24 00:00:00 * @FilePath: \go-wsc\models\agent_workload.go * @Description: 客服负载模型 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-02-24 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-02-24 00:00:00 * @FilePath: \go-wsc\models\agent_workload.go * @Description: 客服负载模型 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
pb
* @Author: kamalyes 501893067@qq.com * @Date: 2025-11-15 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-12-28 00:00:00 * @FilePath: \go-wsc\protocol\ack.go * @Description: ACK消息确认机制 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-11-15 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-12-28 00:00:00 * @FilePath: \go-wsc\protocol\ack.go * @Description: ACK消息确认机制 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-12-29 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-12-29 23:56:18 * @FilePath: \go-wsc\repository\aliases.go * @Description: 类型别名 - 为 models 包中的类型创建别名,便于在 repository 层使用 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-12-29 00:00:00 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-12-29 23:56:18 * @FilePath: \go-wsc\repository\aliases.go * @Description: 类型别名 - 为 models 包中的类型创建别名,便于在 repository 层使用 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL