remote

package
v0.2.1 Latest Latest
Warning

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

Go to latest
Published: Dec 18, 2024 License: Apache-2.0 Imports: 14 Imported by: 2

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 连接时候,也会等待一个时间间隔

使用方法

参考代码

Documentation

Overview

Package remote 基于 redis list 实现的分布式 session manager。

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrGotLockFailed 抢锁失败
	ErrGotLockFailed = errors.New("compete for init sessions failed, wait to consume session")
	// ErrSessionMarshalFailed 从redis中读取session后解析失败
	ErrSessionMarshalFailed = errors.New("session marshal failed")
	// ErrProduceFailed 生产session失败
	ErrProduceFailed = errors.New("produce session failed")
	// ErrorNotOk redis 写失败
	ErrorNotOk = errors.New("redis write not ok")
)

Functions

This section is empty.

Types

type Option

type Option func(manager *RedisManager)

Option is a function that configures a Remote.

func WithClusterKey

func WithClusterKey(key string) Option

WithClusterKey 自定义集群key,用于创建分布式锁与redis list

type RedisManager

type RedisManager struct {
	// contains filtered or unexported fields
}

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

func New

func New(client *redis.Client, opts ...Option) *RedisManager

New 创建一个新的基于 redis 的 session 管理器 使用 go-redis 调用 redis,超时时间请在 NewClient 时候设置

func (*RedisManager) Start

func (r *RedisManager) Start(apInfo *dto.WebsocketAP, tokenSource oauth2.TokenSource, intents *dto.Intent) error

Start 启动 redis 的 session 管理器

Directories

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

Jump to

Keyboard shortcuts

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