Lockstep
目录
列出了该 package 下所有的函数,可通过目录进行快捷跳转 ❤️
展开 / 折叠目录
包级函数定义
| 函数 | 描述 |
|---|---|
| NewLockstep | 创建一个锁步(帧)同步默认实现的组件(Lockstep)进行返回 |
| WithFrameLimit | 通过特定逻辑帧上限创建锁步(帧)同步组件 |
| WithFrameRate | 通过特定逻辑帧率创建锁步(帧)同步组件 |
| WithSerialization | 通过特定的序列化方式将每一帧的数据进行序列化 |
| WithInitFrame | 通过特定的初始帧创建锁步(帧)同步组件 |
结构体定义
| 结构体 | 描述 |
|---|---|
| Client | 帧同步客户端接口定义 |
| StoppedEventHandle | 暂无描述... |
| Lockstep | 锁步(帧)同步默认实现 |
| Option | 暂无描述... |
func NewLockstep(options ...Option[ClientID, Command]) *Lockstep[ClientID, Command]
创建一个锁步(帧)同步默认实现的组件(Lockstep)进行返回
func WithFrameLimit(frameLimit int64) Option[ClientID, Command]
通过特定逻辑帧上限创建锁步(帧)同步组件
- 当达到上限时将停止广播
func WithFrameRate(frameRate int64) Option[ClientID, Command]
通过特定逻辑帧率创建锁步(帧)同步组件
- 默认情况下为 15/s
func WithSerialization(handle func (frame int64, commands []Command) []byte) Option[ClientID, Command]
通过特定的序列化方式将每一帧的数据进行序列化
默认情况下为将被序列化为以下结构体的JSON字符串
type Frame struct { Frame int
json:"frame"Commands []Commandjson:"commands"}
func WithInitFrame(initFrame int64) Option[ClientID, Command]
通过特定的初始帧创建锁步(帧)同步组件
- 默认情况下为 0,即第一帧索引为 0
Client
帧同步客户端接口定义
- 客户端应该具备ID及写入数据包的实现
type Client[ID comparable] struct{}
StoppedEventHandle
type StoppedEventHandle[ClientID comparable, Command any] struct{}
Lockstep
锁步(帧)同步默认实现
- 支持最大帧上限 WithFrameLimit
- 自定逻辑帧频率,默认为每秒15帧(帧/66ms) WithFrameRate
- 自定帧序列化方式 WithSerialization
- 从特定帧开始追帧
- 兼容各种基于TCP/UDP/Unix的网络类型,可通过客户端实现其他网络类型同步
type Lockstep[ClientID comparable, Command any] struct {
running bool
runningLock sync.RWMutex
initFrame int64
frameRate int64
frameLimit int64
serialization func(frame int64, commands []Command) []byte
clients map[ClientID]Client[ClientID]
clientFrame map[ClientID]int64
clientLock sync.RWMutex
currentFrame int64
currentCommands []Command
currentFrameLock sync.RWMutex
frameCache map[int64][]byte
frameCacheLock sync.RWMutex
ticker *time.Ticker
lockstepStoppedEventHandles []StoppedEventHandle[ClientID, Command]
}
Option
type Option[ClientID comparable, Command any] struct{}