Documentation
¶
Index ¶
- func Go(f func())
- type App
- type HookEvent
- type HookFunc
- type Option
- func WithComponent(c core.Component) Option
- func WithConfig[T any](loader conf.Loader, onChange func(cfg *T)) Option
- func WithCrontab(opts ...cron.CronOptions) Option
- func WithGrpcServer(addr string, handler func(*grpc.Server), opts ...grpcserver.Option) Option
- func WithMetric(opts ...telemetry.MetricOption) Option
- func WithPprof(opts ...pprof.Option) Option
- func WithRegistry(r discover.Registry) Option
- func WithService(s Service) Option
- func WithShutdownDrainDelay(d time.Duration) Option
- func WithTrace(opts ...telemetry.TraceOption) Option
- func WithWebServer(addr string, mux http.Handler, opts ...webserver.Option) Option
- type ReadyNotifier
- type Service
- type ServiceKind
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Option ¶
type Option func(app *App)
Option ..
func WithComponent ¶
func WithConfig ¶
WithConfig 把配置接入应用生命周期:构造时用 loader 首次加载并回调 onChange, 随后随应用运行 Watch 配置变更、每次变更重新加载并回调;应用关闭时停止 Watch。
onChange 收到反序列化好的最新配置(每次都是新实例),在其中应用即可:
loader, _ := conf.New("etcd://127.0.0.1:2379/app/config.yaml")
var current atomic.Pointer[AppConfig]
app := beauty.New(
beauty.WithConfig(loader, func(c *AppConfig) { current.Store(c) }),
beauty.WithWebServer(":8080", mux),
)
远程坏配置不会覆盖上一份可用值(见 pkg/conf 的先校验后提交)。
func WithCrontab ¶
func WithCrontab(opts ...cron.CronOptions) Option
func WithGrpcServer ¶
func WithMetric ¶
func WithMetric(opts ...telemetry.MetricOption) Option
func WithPprof ¶
WithPprof 启动一个独立的 pprof HTTP 服务,默认监听 127.0.0.1:6060。 仅在需要线上排查时挂载,生产环境建议通过 SSH 隧道访问而非对外暴露。
func WithRegistry ¶
func WithShutdownDrainDelay ¶
WithShutdownDrainDelay 设置优雅退出时"先注销、再停服"之间的排空等待。 关闭时框架会先从注册中心注销实例,等待该时长让客户端/负载均衡感知到下线, 再开始停止服务端,从而避免关闭瞬间仍有新请求被路由到本实例(滚动发布零停机)。 默认 0:仍保证"先注销后停服"的顺序,只是不额外等待。 仅对实现了 discover.Service 并配置了 registry 的服务生效。
func WithTrace ¶
func WithTrace(opts ...telemetry.TraceOption) Option
type ReadyNotifier ¶
type ReadyNotifier interface {
Ready() <-chan struct{}
}
ReadyNotifier is an optional interface a Service can implement to signal that it is ready to accept traffic (e.g. port is listening). startService waits for this signal before registering with the registry.
type ServiceKind ¶
type ServiceKind interface {
Kind() string
}
Directories
¶
| Path | Synopsis |
|---|---|
|
examples
|
|
|
afterwork
command
afterwork + handler 示例:声明式 handler + 响应后副作用。
|
afterwork + handler 示例:声明式 handler + 响应后副作用。 |
|
audit
command
audit 示例:操作审计,仅记成功请求。
|
audit 示例:操作审计,仅记成功请求。 |
|
backoff
command
backoff 示例:指数退避 + 抖动重试。
|
backoff 示例:指数退避 + 抖动重试。 |
|
bitmap
command
bitmap 示例:签到统计。
|
bitmap 示例:签到统计。 |
|
chat
command
chat 示例:频道消息持久化 + 游标分页历史拉取。
|
chat 示例:频道消息持久化 + 游标分页历史拉取。 |
|
clan
command
clan 示例:用现有原语组合出"公会"语义,不新增包。
|
clan 示例:用现有原语组合出"公会"语义,不新增包。 |
|
complete/example
command
|
|
|
complete/example/api/v1
Package v1 is a reverse proxy.
|
Package v1 is a reverse proxy. |
|
config
command
配置热加载示例:beauty.WithConfig 接入文件/远程配置,变更自动重载。
|
配置热加载示例:beauty.WithConfig 接入文件/远程配置,变更自动重载。 |
|
cooldown
command
cooldown 示例:技能冷却 / 操作限时。
|
cooldown 示例:技能冷却 / 操作限时。 |
|
counter
command
counter 示例:滑动窗口计数 / 时间窗配额。
|
counter 示例:滑动窗口计数 / 时间窗配额。 |
|
cron-leader
command
cron-leader 示例:多实例部署下,Cron 只在选主当选的实例上跑。
|
cron-leader 示例:多实例部署下,Cron 只在选主当选的实例上跑。 |
|
dag
command
DAG 示例:build -> [test, lint 并行] -> deploy。
|
DAG 示例:build -> [test, lint 并行] -> deploy。 |
|
dberr
command
dberr 示例:把数据库错误翻译为带业务码的 *Status。
|
dberr 示例:把数据库错误翻译为带业务码的 *Status。 |
|
delayqueue
command
delayqueue 示例:定点单次延迟触发。
|
delayqueue 示例:定点单次延迟触发。 |
|
ephemeral
command
ephemeral 示例:短期 TTL KV(验证码 / 临时数据 / 缓存)。
|
ephemeral 示例:短期 TTL KV(验证码 / 临时数据 / 缓存)。 |
|
eventbus
command
eventbus 示例:进程内按主题分发的事件总线。
|
eventbus 示例:进程内按主题分发的事件总线。 |
|
featureflag
command
Feature Flag 示例:百分比灰度 + 属性定向 + A/B 实验。
|
Feature Flag 示例:百分比灰度 + 属性定向 + A/B 实验。 |
|
fsm
command
fsm 示例:有限状态机(对局生命周期)。
|
fsm 示例:有限状态机(对局生命周期)。 |
|
gameloop
command
gameloop lockstep demo:基于 beauty 原语搭一个「帧同步」服务端骨架。
|
gameloop lockstep demo:基于 beauty 原语搭一个「帧同步」服务端骨架。 |
|
geohash
command
geohash 示例:经纬度地理编码 + 附近检索。
|
geohash 示例:经纬度地理编码 + 附近检索。 |
|
group
command
group + inbox + ratelimit 示例:群组离线私聊。
|
group + inbox + ratelimit 示例:群组离线私聊。 |
|
grpc-client-discovery
command
|
|
|
grpc-dial-context
command
|
|
|
grpc-label-filter
command
|
|
|
grpc-label-selector
command
|
|
|
grpc-registry-plugin
command
|
|
|
grpc-registry-plugin-simple
command
|
|
|
grpc-service-discovery
command
|
|
|
grpc-xds-client
command
xDS 客户端示例:通过 xds:///service 目标,由 xDS 控制平面(如 Istio/istiod) 下发端点与负载均衡策略。
|
xDS 客户端示例:通过 xds:///service 目标,由 xDS 控制平面(如 Istio/istiod) 下发端点与负载均衡策略。 |
|
hls
command
hls demo:用 pkg/hls 起一个直播 origin,挂在 webserver 上,后台每 2s 喂一个 合成分片(内容是占位字节,非真实 TS——本示例只演示 origin 的播放列表/分片分发, 不涉及编解码)。
|
hls demo:用 pkg/hls 起一个直播 origin,挂在 webserver 上,后台每 2s 喂一个 合成分片(内容是占位字节,非真实 TS——本示例只演示 origin 的播放列表/分片分发, 不涉及编解码)。 |
|
http-service-discovery
command
http-service-discovery 示例:HTTP 客户端 + 服务发现 + 负载均衡。
|
http-service-discovery 示例:HTTP 客户端 + 服务发现 + 负载均衡。 |
|
idempotency
command
idempotency 示例:幂等执行(去重 + 并发合并)。
|
idempotency 示例:幂等执行(去重 + 并发合并)。 |
|
idgen
command
idgen 示例:分布式唯一 ID(Snowflake)。
|
idgen 示例:分布式唯一 ID(Snowflake)。 |
|
keyedmutex
command
keyedmutex 示例:按 key 的细粒度锁。
|
keyedmutex 示例:按 key 的细粒度锁。 |
|
kvstore-shared
command
kvstore-shared 示例:让 counter/cooldown/idempotency 跨实例共享状态。
|
kvstore-shared 示例:让 counter/cooldown/idempotency 跨实例共享状态。 |
|
leaderboard
command
leaderboard 示例:排行榜内存缓存 + "我的名次"查询。
|
leaderboard 示例:排行榜内存缓存 + "我的名次"查询。 |
|
leveling
command
leveling 示例:经验 / 等级曲线。
|
leveling 示例:经验 / 等级曲线。 |
|
live-hls
command
live-hls demo:端到端直播——RTMP 采集 → remux(FLV→MPEG-TS)→ HLS 分发,全程不转码。
|
live-hls demo:端到端直播——RTMP 采集 → remux(FLV→MPEG-TS)→ HLS 分发,全程不转码。 |
|
live-multi
command
live-multi demo:多路直播——一个 RTMP 端口收多路流,按 streamKey 各自成流、各自分发, 用 pkg/media.Hub 做多路管理 + OTel 指标。
|
live-multi demo:多路直播——一个 RTMP 端口收多路流,按 streamKey 各自成流、各自分发, 用 pkg/media.Hub 做多路管理 + OTel 指标。 |
|
live-pk
command
live-pk 组合 demo:多房间直播 PK 后端,展示多个原语如何协作。
|
live-pk 组合 demo:多房间直播 PK 后端,展示多个原语如何协作。 |
|
live-transcode
command
live-transcode demo:拓扑 A —— beauty 收 RTMP,把流管道喂给 ffmpeg 转码成多码率 (ABR)HLS,再用 pkg/hls.Master 组主清单分发。
|
live-transcode demo:拓扑 A —— beauty 收 RTMP,把流管道喂给 ffmpeg 转码成多码率 (ABR)HLS,再用 pkg/hls.Master 组主清单分发。 |
|
loadbalance
command
loadbalance 示例:一致性哈希(会话粘性)+ 平滑加权轮询(按容量分发)。
|
loadbalance 示例:一致性哈希(会话粘性)+ 平滑加权轮询(按容量分发)。 |
|
loot
command
loot 示例:加权随机抽卡(含保底)。
|
loot 示例:加权随机抽卡(含保底)。 |
|
match
command
match 示例:一个 20Hz tick 的 echo 房间。
|
match 示例:一个 20Hz tick 的 echo 房间。 |
|
matchmaker
command
matchmaker 示例:按属性匹配组队。
|
matchmaker 示例:按属性匹配组队。 |
|
momentum
command
momentum 示例:连击 + 热度时间衰减。
|
momentum 示例:连击 + 热度时间衰减。 |
|
notification
command
notification 示例:离线通知队列,上线拉取。
|
notification 示例:离线通知队列,上线拉取。 |
|
party
command
party 示例:无权威小队,Leader 审核 + 状态广播。
|
party 示例:无权威小队,Leader 审核 + 状态广播。 |
|
pathfind
command
pathfind 示例:网格 A* 寻路。
|
pathfind 示例:网格 A* 寻路。 |
|
presence
command
presence 示例:在线状态追踪 + 频道成员列表。
|
presence 示例:在线状态追踪 + 频道成员列表。 |
|
protobuf-example/gen/go/api
Package v1 is a reverse proxy.
|
Package v1 is a reverse proxy. |
|
questlog
command
questlog 示例:每日任务 / 成就进度。
|
questlog 示例:每日任务 / 成就进度。 |
|
reddot
command
reddot 示例:小红点 / 未读聚合树。
|
reddot 示例:小红点 / 未读聚合树。 |
|
relationship
command
relationship 示例:社交图谱——好友 + 关注 + 拉黑。
|
relationship 示例:社交图谱——好友 + 关注 + 拉黑。 |
|
resilience/circuitbreaker
command
|
|
|
resilience/timeout
command
|
|
|
resume
command
resume 示例:断线重连的在场状态还原。
|
resume 示例:断线重连的在场状态还原。 |
|
ringbuffer
command
ringbuffer 示例:最近 N 条弹幕。
|
ringbuffer 示例:最近 N 条弹幕。 |
|
router
command
router 示例:多语义消息路由 + 攒批。
|
router 示例:多语义消息路由 + 攒批。 |
|
saga
command
saga 示例:跨服务 Saga 编排(抽卡流程)。
|
saga 示例:跨服务 Saga 编排(抽卡流程)。 |
|
scheduler
command
scheduler 示例:工作池 + 暂停/恢复。
|
scheduler 示例:工作池 + 暂停/恢复。 |
|
security/auth-ratelimit
command
|
|
|
services/k8s
command
|
|
|
services/svc
command
|
|
|
session
command
session 示例:有状态 WebSocket 会话,echo + 广播。
|
session 示例:有状态 WebSocket 会话,echo + 广播。 |
|
spatial
command
spatial 示例:网格空间索引(附近的人)。
|
spatial 示例:网格空间索引(附近的人)。 |
|
sse
command
SSE 示例:一个定时推送端点 + 一个广播端点。
|
SSE 示例:一个定时推送端点 + 一个广播端点。 |
|
statesync
command
statesync demo:基于同一个 pkg/gameloop.Room,换个 Handler 就从帧同步切到「状态同步」。
|
statesync demo:基于同一个 pkg/gameloop.Room,换个 Handler 就从帧同步切到「状态同步」。 |
|
statesync-quic
command
statesync-quic demo:把状态同步搬到 QUIC,用一条连接的两种通道分流两类数据。
|
statesync-quic demo:把状态同步搬到 QUIC,用一条连接的两种通道分流两类数据。 |
|
status
command
status 示例:用户上下线时给关注者推送状态通知。
|
status 示例:用户上下线时给关注者推送状态通知。 |
|
storage
command
storage 示例:版本化对象存储,OCC 乐观锁。
|
storage 示例:版本化对象存储,OCC 乐观锁。 |
|
tally
command
tally 示例:高频累计聚合 + 批量刷写。
|
tally 示例:高频累计聚合 + 批量刷写。 |
|
token
command
token 示例:会话令牌签发、续签、注销全流程。
|
token 示例:会话令牌签发、续签、注销全流程。 |
|
tournament
command
tournament 示例:每日重置排行榜。
|
tournament 示例:每日重置排行榜。 |
|
txn
command
txn 示例:跨域原子事务——扣钱包 + 写存档,任一失败全回滚。
|
txn 示例:跨域原子事务——扣钱包 + 写存档,任一失败全回滚。 |
|
versus
command
versus 示例:直播 PK(限时双方对抗计分)。
|
versus 示例:直播 PK(限时双方对抗计分)。 |
|
wallet
command
wallet 示例:虚拟货币账本,差额更新 + 不可超扣。
|
wallet 示例:虚拟货币账本,差额更新 + 不可超扣。 |
|
webhook
command
Webhook 示例:注册端点(事件过滤 + 签名 + 幂等去重 + DLQ),按事件触发通知。
|
Webhook 示例:注册端点(事件过滤 + 签名 + 幂等去重 + DLQ),按事件触发通知。 |
|
websocket
command
WebSocket 示例:echo 端点 + JSON 广播端点。
|
WebSocket 示例:echo 端点 + JSON 广播端点。 |
|
pkg
|
|
|
afterwork
Package afterwork 提供请求级后台任务延寿(waitUntil 语义)。
|
Package afterwork 提供请求级后台任务延寿(waitUntil 语义)。 |
|
audit
Package audit 提供操作审计日志:结构化记录"谁在何时对什么资源做了什么操作", 仅记录成功的请求(失败请求走普通日志),用于合规与运维审计。
|
Package audit 提供操作审计日志:结构化记录"谁在何时对什么资源做了什么操作", 仅记录成功的请求(失败请求走普通日志),用于合规与运维审计。 |
|
backoff
Package backoff 提供指数退避 + 抖动(jitter)的重试原语,纯标准库。
|
Package backoff 提供指数退避 + 抖动(jitter)的重试原语,纯标准库。 |
|
bitmap
Package bitmap 提供位图:用 1 bit 表示一个布尔状态,极省内存的大规模标记与集合运算。
|
Package bitmap 提供位图:用 1 bit 表示一个布尔状态,极省内存的大规模标记与集合运算。 |
|
callbacks
Package callbacks 提供非侵入的执行切面:在某个执行单元的开始/结束/出错时机 触发回调,用于统一注入可观测性(trace、metrics、日志)而不改动业务代码。
|
Package callbacks 提供非侵入的执行切面:在某个执行单元的开始/结束/出错时机 触发回调,用于统一注入可观测性(trace、metrics、日志)而不改动业务代码。 |
|
chanx
Package chanx 提供无界 channel 等 channel 扩展原语。
|
Package chanx 提供无界 channel 等 channel 扩展原语。 |
|
client/grpcclient/resolver/consul
Package consul registers a Consul-backed gRPC name resolver.
|
Package consul registers a Consul-backed gRPC name resolver. |
|
client/grpcclient/resolver/etcd
Package etcd registers an etcd-backed gRPC name resolver.
|
Package etcd registers an etcd-backed gRPC name resolver. |
|
client/grpcclient/resolver/k8s
Package k8s registers a Kubernetes-backed gRPC name resolver.
|
Package k8s registers a Kubernetes-backed gRPC name resolver. |
|
client/grpcclient/resolver/nacos
Package nacos registers a Nacos-backed gRPC name resolver.
|
Package nacos registers a Nacos-backed gRPC name resolver. |
|
client/grpcclient/resolver/polaris
Package polaris registers a Polaris-backed gRPC name resolver.
|
Package polaris registers a Polaris-backed gRPC name resolver. |
|
client/grpcclient/xds
Package xds 启用客户端 xDS 支持。
|
Package xds 启用客户端 xDS 支持。 |
|
cooldown
Package cooldown 提供按 key 的冷却(CD)原语:某个动作触发后,要等到冷却结束 才能再次触发。
|
Package cooldown 提供按 key 的冷却(CD)原语:某个动作触发后,要等到冷却结束 才能再次触发。 |
|
counter
Package counter 提供按 key 的滑动窗口计数与时间窗配额,纯内存实现。
|
Package counter 提供按 key 的滑动窗口计数与时间窗配额,纯内存实现。 |
|
ctxkey
Package ctxkey 提供类型安全的 context.Context 键。
|
Package ctxkey 提供类型安全的 context.Context 键。 |
|
dag
Package dag 提供一个轻量的有向无环图(DAG)执行器: 按依赖关系将节点拓扑分层,同一层内的节点并行执行,层间串行。
|
Package dag 提供一个轻量的有向无环图(DAG)执行器: 按依赖关系将节点拓扑分层,同一层内的节点并行执行,层间串行。 |
|
dberr
Package dberr 把数据库驱动错误翻译为 pkg/errors 的 *Status, 让仓储层只抛原生 driver error,中间件/网关层统一拿到带业务码的错误。
|
Package dberr 把数据库驱动错误翻译为 pkg/errors 的 *Status, 让仓储层只抛原生 driver error,中间件/网关层统一拿到带业务码的错误。 |
|
delayqueue
Package delayqueue 提供定点单次触发的延迟任务原语:注册一个未来时刻要执行的 回调,到点由后台 goroutine 触发;支持按 key 取消 / 改期。
|
Package delayqueue 提供定点单次触发的延迟任务原语:注册一个未来时刻要执行的 回调,到点由后台 goroutine 触发;支持按 key 取消 / 改期。 |
|
dlock
Package dlock 定义跨进程分布式锁与选主(leader election)的后端无关接口。
|
Package dlock 定义跨进程分布式锁与选主(leader election)的后端无关接口。 |
|
domain/chat
Package chat 提供频道聊天消息:按 channel 持久化 + 自增 message_id 游标分页。
|
Package chat 提供频道聊天消息:按 channel 持久化 + 自增 message_id 游标分页。 |
|
domain/group
Package group 提供群组实体:成员角色、邀请/申请审核、公告、最大人数、封禁名单。
|
Package group 提供群组实体:成员角色、邀请/申请审核、公告、最大人数、封禁名单。 |
|
domain/inbox
Package inbox 提供点对点离线消息收件箱:已读/未读、游标分页、ACK。
|
Package inbox 提供点对点离线消息收件箱:已读/未读、游标分页、ACK。 |
|
domain/notification
Package notification 提供离线通知队列:用户不在线时存通知,上线后拉取, 与 pkg/router 的实时路由互补——router 投在线者,notification 投离线者。
|
Package notification 提供离线通知队列:用户不在线时存通知,上线后拉取, 与 pkg/router 的实时路由互补——router 投在线者,notification 投离线者。 |
|
domain/party
Package party 提供无权威的多人小团体原语:Leader + Members + 加入请求队列, 成员变更时广播给全员。
|
Package party 提供无权威的多人小团体原语:Leader + Members + 加入请求队列, 成员变更时广播给全员。 |
|
domain/relationship
Package relationship 提供社交图谱原语:用二部有向图刻画"谁对谁是什么关系", 支持好友(双向)、关注(单向)、拉黑(单向隔离)、群组成员(带角色)等多种语义, 通过状态编码 + position 游标实现高效查询与分页。
|
Package relationship 提供社交图谱原语:用二部有向图刻画"谁对谁是什么关系", 支持好友(双向)、关注(单向)、拉黑(单向隔离)、群组成员(带角色)等多种语义, 通过状态编码 + position 游标实现高效查询与分页。 |
|
domain/storage
Package storage 提供版本化的对象存储原语:owner + collection + key + value + version, 通过乐观并发控制(OCC)保证并发写不覆盖,支持三种写语义与懒淘汰索引。
|
Package storage 提供版本化的对象存储原语:owner + collection + key + value + version, 通过乐观并发控制(OCC)保证并发写不覆盖,支持三种写语义与懒淘汰索引。 |
|
domain/tournament
Package tournament 提供锦标赛(时间窗排行榜):在 pkg/leaderboard 之上 增加"按 cron 表达式周期性重置"的能力,每周期一个独立榜单,到期自动滚动到下一周期。
|
Package tournament 提供锦标赛(时间窗排行榜):在 pkg/leaderboard 之上 增加"按 cron 表达式周期性重置"的能力,每周期一个独立榜单,到期自动滚动到下一周期。 |
|
domain/wallet
Package wallet 提供虚拟货币/积分/库存的账本式钱包: 采用"不可变事务日志(append-only ledger) + 当前余额派生"双模型, 通过 changeset 差值更新原子校验,避免超扣/超发。
|
Package wallet 提供虚拟货币/积分/库存的账本式钱包: 采用"不可变事务日志(append-only ledger) + 当前余额派生"双模型, 通过 changeset 差值更新原子校验,避免超扣/超发。 |
|
ephemeral
Package ephemeral 提供短期 TTL KV:不版本化、不持久,纯内存 + 到点自动过期。
|
Package ephemeral 提供短期 TTL KV:不版本化、不持久,纯内存 + 到点自动过期。 |
|
eventbus
Package eventbus 提供进程内、按主题(topic)分发的泛型事件总线:发布者按 topic 发事件,订阅者按 topic 注册回调处理函数,解耦"谁发"与"谁收"。
|
Package eventbus 提供进程内、按主题(topic)分发的泛型事件总线:发布者按 topic 发事件,订阅者按 topic 注册回调处理函数,解耦"谁发"与"谁收"。 |
|
featureflag
Package featureflag 提供本地评估的特性开关与 A/B 实验: 布尔开关、百分比灰度、按属性定向、多变体实验,均基于确定性哈希分桶, 同一标识(如 userID)多次评估结果稳定,无需远程调用。
|
Package featureflag 提供本地评估的特性开关与 A/B 实验: 布尔开关、百分比灰度、按属性定向、多变体实验,均基于确定性哈希分桶, 同一标识(如 userID)多次评估结果稳定,无需远程调用。 |
|
fsm
Package fsm 提供泛型有限状态机原语:声明式定义"状态 + 事件 → 目标状态"的 合法转移表,运行时 Fire(event) 只允许沿合法转移推进,非法转移报错而非静默改状态。
|
Package fsm 提供泛型有限状态机原语:声明式定义"状态 + 事件 → 目标状态"的 合法转移表,运行时 Fire(event) 只允许沿合法转移推进,非法转移报错而非静默改状态。 |
|
gameloop
Package gameloop 是一个「机制而非策略」的定步长游戏循环原语,用于在 beauty 上 搭帧同步(lockstep)/状态同步的服务端骨架。
|
Package gameloop 是一个「机制而非策略」的定步长游戏循环原语,用于在 beauty 上 搭帧同步(lockstep)/状态同步的服务端骨架。 |
|
generic
Package generic 提供一组类型安全的泛型/反射小工具。
|
Package generic 提供一组类型安全的泛型/反射小工具。 |
|
geohash
Package geohash 提供经纬度的 Geohash 编码/解码、邻居计算与覆盖查询,纯标准库。
|
Package geohash 提供经纬度的 Geohash 编码/解码、邻居计算与覆盖查询,纯标准库。 |
|
governance/bannednodes
Package bannednodes 提供单次请求内的节点禁用机制。
|
Package bannednodes 提供单次请求内的节点禁用机制。 |
|
governance/circuitbreaker
Package circuitbreaker 提供节点级熔断器。
|
Package circuitbreaker 提供节点级熔断器。 |
|
governance/overloadctrl
Package overloadctrl 提供反馈驱动的自适应限流。
|
Package overloadctrl 提供反馈驱动的自适应限流。 |
|
governance/router
Package router 提供服务发现与负载均衡之间的路由过滤层。
|
Package router 提供服务发现与负载均衡之间的路由过滤层。 |
|
handler
Package handler 提供声明式 HTTP handler 包装器:把 auth 策略 + 资源注入 + 错误归一化从业务 handler 上移到包装器,handler 只关心 (ctx, req) => (resp, error)。
|
Package handler 提供声明式 HTTP handler 包装器:把 auth 策略 + 资源注入 + 错误归一化从业务 handler 上移到包装器,handler 只关心 (ctx, req) => (resp, error)。 |
|
hls
Package hls 提供一个直播/点播 HLS origin:管理滚动分片窗口、生成 m3u8 播放列表, 并作为 http.Handler 挂在任意 mux(如 pkg/service/webserver)上分发。
|
Package hls 提供一个直播/点播 HLS origin:管理滚动分片窗口、生成 m3u8 播放列表, 并作为 http.Handler 挂在任意 mux(如 pkg/service/webserver)上分发。 |
|
idempotency
Package idempotency 提供幂等执行原语:同一 key 的重复请求只执行一次, 后续请求(含并发)复用首次结果,直到该 key 过期。
|
Package idempotency 提供幂等执行原语:同一 key 的重复请求只执行一次, 后续请求(含并发)复用首次结果,直到该 key 过期。 |
|
idgen
Package idgen 提供分布式唯一 ID 生成器(Snowflake 算法),纯标准库实现。
|
Package idgen 提供分布式唯一 ID 生成器(Snowflake 算法),纯标准库实现。 |
|
infra/k8s
Package k8s 提供基于 Kubernetes 原生选主能力实现 pkg/dlock.Elector 的后端, 使 Cron 等"多实例只该有一个在跑"的场景可以直接用集群内已有的 k8s API, 不必额外运维一套 etcd/Redis。
|
Package k8s 提供基于 Kubernetes 原生选主能力实现 pkg/dlock.Elector 的后端, 使 Cron 等"多实例只该有一个在跑"的场景可以直接用集群内已有的 k8s API, 不必额外运维一套 etcd/Redis。 |
|
infra/redis
Package redis 提供基于 Redis 的基建适配:分布式锁/选主(实现 pkg/dlock)与 带 TTL 的原子 KV 存储(实现 pkg/kvstore.Store,给 counter/cooldown/idempotency 等原语一个真实的跨实例后端)。
|
Package redis 提供基于 Redis 的基建适配:分布式锁/选主(实现 pkg/dlock)与 带 TTL 的原子 KV 存储(实现 pkg/kvstore.Store,给 counter/cooldown/idempotency 等原语一个真实的跨实例后端)。 |
|
keyedmutex
Package keyedmutex 提供按 key 的细粒度锁:同一 key 的持有者互斥(串行), 不同 key 之间互不阻塞(并行)。
|
Package keyedmutex 提供按 key 的细粒度锁:同一 key 的持有者互斥(串行), 不同 key 之间互不阻塞(并行)。 |
|
kvstore
Package kvstore 定义一个带 TTL 的原子键值存储接口,供需要"跨进程共享状态"的 原语(counter / cooldown / idempotency)接入分布式后端(如 Redis)。
|
Package kvstore 定义一个带 TTL 的原子键值存储接口,供需要"跨进程共享状态"的 原语(counter / cooldown / idempotency)接入分布式后端(如 Redis)。 |
|
leaderboard
Package leaderboard 提供排行榜的内存排名缓存:用堆排序维护每个榜的有序结构, O(log N) 查"我的名次"、按名次取记录,避免高频读时每次 ORDER BY 击穿数据库。
|
Package leaderboard 提供排行榜的内存排名缓存:用堆排序维护每个榜的有序结构, O(log N) 查"我的名次"、按名次取记录,避免高频读时每次 ORDER BY 击穿数据库。 |
|
leveling
Package leveling 提供经验值 / 等级曲线原语:给定当前经验加一笔增量,算出新等级、 是否升级、跨了几级、当前等级内进度。
|
Package leveling 提供经验值 / 等级曲线原语:给定当前经验加一笔增量,算出新等级、 是否升级、跨了几级、当前等级内进度。 |
|
loadbalance
Package loadbalance 提供通用的负载均衡算法原语,不绑定任何 RPC/服务发现框架。
|
Package loadbalance 提供通用的负载均衡算法原语,不绑定任何 RPC/服务发现框架。 |
|
loot
Package loot 提供加权随机抽取原语:抽卡 / 开宝箱 / 怪物掉落 / 直播抽奖。
|
Package loot 提供加权随机抽取原语:抽卡 / 开宝箱 / 怪物掉落 / 直播抽奖。 |
|
match
Package match 提供有状态实时会话原语,采用 actor 模型: 每个会话(房间/对战/协作编辑)由独立 goroutine 驱动,固定帧率 tick, 所有输入(业务数据、成员变更、同步信号)经带缓冲 channel 串行消费, 状态封装在 goroutine 内,无需锁。
|
Package match 提供有状态实时会话原语,采用 actor 模型: 每个会话(房间/对战/协作编辑)由独立 goroutine 驱动,固定帧率 tick, 所有输入(业务数据、成员变更、同步信号)经带缓冲 channel 串行消费, 状态封装在 goroutine 内,无需锁。 |
|
matchmaker
Package matchmaker 提供基于属性匹配的组队原语。
|
Package matchmaker 提供基于属性匹配的组队原语。 |
|
media
Package media 提供直播/视频服务的编排薄机制:多路流管理(Hub)、子进程监督 (Supervisor,如 ffmpeg 转码进程,含崩溃重启)与 OTel 运维指标。
|
Package media 提供直播/视频服务的编排薄机制:多路流管理(Hub)、子进程监督 (Supervisor,如 ffmpeg 转码进程,含崩溃重启)与 OTel 运维指标。 |
|
media/remux
Package remux 把 RTMP 收到的 FLV(H.264 + AAC)重封装成 MPEG-TS 分片,按关键帧切片 后 Append 到 pkg/hls.Stream——从而把 pkg/media/rtmp(采集)和 pkg/hls(分发)串成 一条端到端直播链路。
|
Package remux 把 RTMP 收到的 FLV(H.264 + AAC)重封装成 MPEG-TS 分片,按关键帧切片 后 Append 到 pkg/hls.Stream——从而把 pkg/media/rtmp(采集)和 pkg/hls(分发)串成 一条端到端直播链路。 |
|
media/rtmp
Package rtmp 提供一个 RTMP 采集(ingest)服务端,薄封装 github.com/yutopp/go-rtmp。
|
Package rtmp 提供一个 RTMP 采集(ingest)服务端,薄封装 github.com/yutopp/go-rtmp。 |
|
metadata
Package metadata 提供服务间调用的透传元数据机制。
|
Package metadata 提供服务间调用的透传元数据机制。 |
|
metadata/propagation
Package propagation 提供 MD 在 HTTP / gRPC 传输层的注入与提取实现。
|
Package propagation 提供 MD 在 HTTP / gRPC 传输层的注入与提取实现。 |
|
middleware/callbacks
Package callbacks 把 pkg/callbacks 的切面接入 beauty 的 HTTP / gRPC 服务: 在每个请求前后触发已注册的 callbacks.Handler(全局或随 ctx 局部), 用于统一注入 trace / metrics / 日志,而无需改动业务 handler。
|
Package callbacks 把 pkg/callbacks 的切面接入 beauty 的 HTTP / gRPC 服务: 在每个请求前后触发已注册的 callbacks.Handler(全局或随 ctx 局部), 用于统一注入 trace / metrics / 日志,而无需改动业务 handler。 |
|
momentum
Package momentum 提供"连击 + 热度时间衰减"原语:按 key 追踪连续触发的连击数, 并维护一个随时间指数衰减的热度值。
|
Package momentum 提供"连击 + 热度时间衰减"原语:按 key 追踪连续触发的连击数, 并维护一个随时间指数衰减的热度值。 |
|
options
Package options 提供分层的功能选项(functional options)模式: 框架定义一组“通用选项”,各实现方再追加自己的“专属选项”,调用方把两类选项 混在同一个 []Option 里传入;框架与实现各自用类型安全的方式提取属于自己的部分。
|
Package options 提供分层的功能选项(functional options)模式: 框架定义一组“通用选项”,各实现方再追加自己的“专属选项”,调用方把两类选项 混在同一个 []Option 里传入;框架与实现各自用类型安全的方式提取属于自己的部分。 |
|
pathfind
Package pathfind 提供网格地图上的 A* 寻路,纯计算、纯标准库、零依赖。
|
Package pathfind 提供网格地图上的 A* 寻路,纯计算、纯标准库、零依赖。 |
|
presence
Package presence 提供在线状态(在场追踪)原语:维护"谁在哪个流(stream)里" 的双向索引,支持 O(1) 按流查询成员、按会话查询所在流,以及 join/leave 事件总线。
|
Package presence 提供在线状态(在场追踪)原语:维护"谁在哪个流(stream)里" 的双向索引,支持 O(1) 按流查询成员、按会话查询所在流,以及 join/leave 事件总线。 |
|
presence/status
Package status 把用户的在线状态变化(上线/下线/进出流)推送给关注他的人。
|
Package status 把用户的在线状态变化(上线/下线/进出流)推送给关注他的人。 |
|
questlog
Package questlog 提供任务 / 成就的进度追踪:定义一组带目标值的任务,累加进度, 达标后可领取(一次),支持前置依赖与周期重置。
|
Package questlog 提供任务 / 成就的进度追踪:定义一组带目标值的任务,累加进度, 达标后可领取(一次),支持前置依赖与周期重置。 |
|
quic
Package quic 提供基于 QUIC(quic-go)的连接层,作为 pkg/ws(WebSocket/TCP)之外 面向实时/游戏同步的可选传输。
|
Package quic 提供基于 QUIC(quic-go)的连接层,作为 pkg/ws(WebSocket/TCP)之外 面向实时/游戏同步的可选传输。 |
|
ratelimit
Package ratelimit 提供基于键的限流原语:令牌桶 + 滑动窗口两种实现, 外加 HTTP 中间件,可与 pkg/handler 组合(声明式 WithRatelimit)。
|
Package ratelimit 提供基于键的限流原语:令牌桶 + 滑动窗口两种实现, 外加 HTTP 中间件,可与 pkg/handler 组合(声明式 WithRatelimit)。 |
|
reddot
Package reddot 提供小红点 / 未读聚合树:把散落各处的未读数按树形层级聚合, 父节点的未读 = 所有子节点未读之和,叶子清零自动向上传播。
|
Package reddot 提供小红点 / 未读聚合树:把散落各处的未读数按树形层级聚合, 父节点的未读 = 所有子节点未读之和,叶子清零自动向上传播。 |
|
resume
Package resume 提供断线重连的在场状态还原:客户端用 refresh token 重连, 服务端换出 userID,查 presence 看用户还在哪些流,返回流列表让客户端自动重连。
|
Package resume 提供断线重连的在场状态还原:客户端用 refresh token 重连, 服务端换出 userID,查 presence 看用户还在哪些流,返回流列表让客户端自动重连。 |
|
ringbuffer
Package ringbuffer 提供定长环形缓冲:只保留最近 N 条,写满后覆盖最旧的, O(1) 追加。
|
Package ringbuffer 提供定长环形缓冲:只保留最近 N 条,写满后覆盖最旧的, O(1) 追加。 |
|
router
Package router 提供多语义消息路由:把一条消息发给一组人(presence IDs)、 一个流(stream)的全部成员、或所有人,并支持一帧内多条消息攒批下发。
|
Package router 提供多语义消息路由:把一条消息发给一组人(presence IDs)、 一个流(stream)的全部成员、或所有人,并支持一帧内多条消息攒批下发。 |
|
safe
Package safe 提供 panic 恢复相关的小工具:把 panic 转成带堆栈的 error, 以及安全启动 goroutine(panic 不会崩进程)。
|
Package safe 提供 panic 恢复相关的小工具:把 panic 转成带堆栈的 error, 以及安全启动 goroutine(panic 不会崩进程)。 |
|
saga
Package saga 提供跨服务 Saga 编排:按顺序执行一组"正向操作",任一步失败时 逆序执行已成功步骤的"补偿操作",达成最终一致。
|
Package saga 提供跨服务 Saga 编排:按顺序执行一组"正向操作",任一步失败时 逆序执行已成功步骤的"补偿操作",达成最终一致。 |
|
scheduler
Package scheduler 提供工作池式任务调度器:生产者把任务投递到队列, N 个 worker goroutine 并发消费;支持运行时 Pause/Resume 与优雅停止。
|
Package scheduler 提供工作池式任务调度器:生产者把任务投递到队列, N 个 worker goroutine 并发消费;支持运行时 Pause/Resume 与优雅停止。 |
|
spatial
Package spatial 提供网格空间索引:把实体按坐标分桶到固定大小的网格单元, 支持"范围查询"(附近的人/实体)与 KNN(最近的 N 个),避免全量遍历。
|
Package spatial 提供网格空间索引:把实体按坐标分桶到固定大小的网格单元, 支持"范围查询"(附近的人/实体)与 KNN(最近的 N 个),避免全量遍历。 |
|
sse
Package sse 提供 Server-Sent Events 的轻量封装,屏蔽 SSE 在 Go 里的常见坑: 自动设置流式响应头、解除本连接的写超时(避免被 server WriteTimeout 掐断)、 每条事件后自动 flush(穿透 otelhttp / compress 等包装链)、客户端断开时结束。
|
Package sse 提供 Server-Sent Events 的轻量封装,屏蔽 SSE 在 Go 里的常见坑: 自动设置流式响应头、解除本连接的写超时(避免被 server WriteTimeout 掐断)、 每条事件后自动 flush(穿透 otelhttp / compress 等包装链)、客户端断开时结束。 |
|
stream
Package stream 提供流式扇出(广播)原语:把一个事件源 fan-out 给多个订阅者, 适合 SSE / WebSocket 等"一份数据推给 N 个连接"的场景。
|
Package stream 提供流式扇出(广播)原语:把一个事件源 fan-out 给多个订阅者, 适合 SSE / WebSocket 等"一份数据推给 N 个连接"的场景。 |
|
tally
Package tally 提供高频累计聚合 + 批量刷写:把海量小额增量在内存里按 key 累加, 定时(或攒够阈值)合并成一批交给 flush 回调一次性处理,削平写放大。
|
Package tally 提供高频累计聚合 + 批量刷写:把海量小额增量在内存里按 key 累加, 定时(或攒够阈值)合并成一批交给 flush 回调一次性处理,削平写放大。 |
|
token
Package token 提供会话令牌的全生命周期管理:签发、验证、续签、注销。
|
Package token 提供会话令牌的全生命周期管理:签发、验证、续签、注销。 |
|
txn
Package txn 提供跨域事务协调:让 wallet/storage/notification 等域包 在一个逻辑事务边界内原子提交或全部回滚。
|
Package txn 提供跨域事务协调:让 wallet/storage/notification 等域包 在一个逻辑事务边界内原子提交或全部回滚。 |
|
vars
Package vars 提供轻量的 ${KEY} 变量插值,零依赖。
|
Package vars 提供轻量的 ${KEY} 变量插值,零依赖。 |
|
versus
Package versus 提供"限时多方对抗计分"原语:N 个阵营在一段倒计时内实时累计分, 到点定胜负。
|
Package versus 提供"限时多方对抗计分"原语:N 个阵营在一段倒计时内实时累计分, 到点定胜负。 |
|
webhook
Package webhook 提供事件驱动的 Webhook 通知:按事件类型过滤、自定义 header、 可选 body 模板、可选 HMAC 签名,异步触发并带指数退避重试。
|
Package webhook 提供事件驱动的 Webhook 通知:按事件类型过滤、自定义 header、 可选 body 模板、可选 HMAC 签名,异步触发并带指数退避重试。 |
|
ws
Package ws 基于 github.com/coder/websocket 提供 WebSocket 的轻量封装: 自动完成握手升级、统一关闭语义,并把 *http.Request 透传给业务, 便于读取 query / header / 子协议 / 鉴权信息。
|
Package ws 基于 github.com/coder/websocket 提供 WebSocket 的轻量封装: 自动完成握手升级、统一关闭语义,并把 *http.Request 透传给业务, 便于读取 query / header / 子协议 / 鉴权信息。 |
|
ws/session
Package session 提供基于 WebSocket 的有状态会话高阶封装。
|
Package session 提供基于 WebSocket 的有状态会话高阶封装。 |
|
tools
module
|