package
0.1.6
Repository: https://github.com/tencent-connect/botgo.git
Documentation: pkg.go.dev

# README

分布式 session manager

这是一个基于 redislist 数据结构的分布式 session manager。

实现原理

1.基于 redis 实现的分布式锁,启动的时候先抢锁,抢到锁的服务实例根据从 openapi 拉取到的 shards 进行 session 的分发

2.启动一个本地的 sessionProduceChan 的消费,用于将需重连的 session 重新 push 到 redis 中,如果 push 失败,放回 chan 进行下一次重试

3.启动一个消费者,从 redis pop 数据,解析 session,然后创建新的 websocket client 连接

4.如果在处理 websocket 数据过程中出现连接错误等情况,将 session 放回到 sessionProduceChan 中,重新进行分发

并发控制

由于服务端对于同时连接的 websocket 连接有并发限制,所以从 sessionProduceChan 拿到一个 session push 到 redis 之前,会等待一个并发间隔

在创建了一个新的 websocket 连接时候,也会等待一个时间间隔

使用方法

参考代码

# Packages

Package lock 一个基于 redis 的分布式锁实现。.

# Functions

New 创建一个新的基于 redis 的 session 管理器 使用 go-redis 调用 redis,超时时间请在 NewClient 时候设置.
WithClusterKey 自定义集群key,用于创建分布式锁与redis list.

# Variables

ErrGotLockFailed 抢锁失败.
ErrorNotOk redis 写失败.
ErrProduceFailed 生产session失败.
ErrSessionMarshalFailed 从redis中读取session后解析失败.

# Structs

RedisManager 基于 redis 的 session 管理器,实现分布式 websocket 监听.

# Type aliases

Option is a function that configures a Remote.