refactor: 将 WithSticky 重命名为 StickyCtx,避免与 pool Option 的 With* 前缀冲突

This commit is contained in:
2026-05-08 15:21:59 +08:00
parent a3cf983b39
commit e6a61cc1ee
3 changed files with 11 additions and 11 deletions

View File

@@ -188,7 +188,7 @@ def slow_compute(n: int) -> int:
## Session 亲和路由
默认情况下,每次 `Invoke` 通过轮询分配 worker 进程。当多次调用需要共享同一 Python 进程的状态时,可以使用 Session 或 WithSticky 将调用固定到同一进程。
默认情况下,每次 `Invoke` 通过轮询分配 worker 进程。当多次调用需要共享同一 Python 进程的状态时,可以使用 Session 或 StickyCtx 将调用固定到同一进程。
### NewSession
@@ -223,13 +223,13 @@ def step(session_id: str, delta: int) -> int:
> `NewSession` 不拥有底层 pool 的生命周期,调用 `session.Close()` 是空操作,只需关闭原始 pool。
### WithSticky
### StickyCtx
`WithSticky` 将亲和键写入 ctx相同 key 通过哈希稳定路由到同一 worker无需持有 session 对象:
`StickyCtx` 将亲和键写入 ctx相同 key 通过哈希稳定路由到同一 worker无需持有 session 对象:
```go
// 每次调用前附加 key相同 key 始终走同一 worker
ctx = gobridge.WithSticky(ctx, "user-42")
ctx = gobridge.StickyCtx(ctx, "user-42")
gobridge.Invoke(ctx, pool, "method_a", ...)
gobridge.Invoke(ctx, pool, "method_b", ...)
```
@@ -262,7 +262,7 @@ gobridge.Invoke(ctx, sessB, "increment", 99) // worker 0: counter = 99独立
### 两种方式对比
| | `NewSession` | `WithSticky` |
| | `NewSession` | `StickyCtx` |
|---|---|---|
| 路由方式 | 创建时轮询确定 worker | 按 key 哈希确定 worker |
| 适用场景 | 显式会话管理 | 按自然键(用户 ID 等)路由 |

View File

@@ -235,13 +235,13 @@ func demoSession(ctx context.Context, script string) {
r, _ = gobridge.Invoke[string](ctx, sessA, "global_get")
fmt.Println("sessA get:", r) // worker 1 counter = 15不受 sessB 影响)
// ── WithSticky相同 key 跨调用始终路由同一 worker ────────────────────
// ── StickyCtx:相同 key 跨调用始终路由同一 worker ────────────────────
fmt.Println()
for i := range 4 {
affinityCtx := gobridge.WithSticky(ctx, "sticky-key")
affinityCtx := gobridge.StickyCtx(ctx, "sticky-key")
msg, _ := gobridge.Invoke[string](affinityCtx, pool, "session_init",
fmt.Sprintf("aff-%d", i), i)
fmt.Printf("WithSticky(sticky-key) #%d → %s\n", i, msg)
fmt.Printf("StickyCtx(sticky-key) #%d → %s\n", i, msg)
}
// ── 对照组:不带亲和,轮询分配给两个 worker ─────────────────────────────

View File

@@ -7,11 +7,11 @@ import (
type stickyKey struct{} // 用户提供的字符串 keyacquire 时 hash 到 worker 下标
// WithSticky 将粘性键写入 ctx相同 key 始终路由到同一 worker 进程。
// StickyCtx 将粘性键写入 ctx相同 key 始终路由到同一 worker 进程。
//
// ctx = gobridge.WithSticky(ctx, "user-42")
// ctx = gobridge.StickyCtx(ctx, "user-42")
// gobridge.Invoke(ctx, pool, "method", ...) // 同 key 始终走同一进程
func WithSticky(ctx context.Context, key string) context.Context {
func StickyCtx(ctx context.Context, key string) context.Context {
return context.WithValue(ctx, stickyKey{}, key)
}