collect-system/packages/tus/src/utils/models/Locker.ts

28 lines
1.2 KiB
TypeScript

export type RequestRelease = () => Promise<void> | void
/**
* Locker 接口用于为给定的资源标识符创建一个 Lock 实例。
* 该接口的主要作用是提供一个锁定机制,确保对资源(如上传和其元数据)的独占访问。
*/
export interface Locker {
newLock(id: string): Lock
}
/**
* Lock 接口定义了实现锁定机制的方法。
* 该接口主要用于确保对资源的独占访问,遵循 TUS 协议的建议,强调需要防止长时间保留锁。
* 这种方法有助于高效管理资源,并避免半开 TCP 连接的问题。
*
* 方法:
* - lock(id, cancelReq): 获取由 'id' 标识的资源的锁。如果锁已被另一个请求持有,
* 则提供 'cancelReq' 回调以通知当前锁持有者释放锁。
* 'cancelReq' 回调应在另一个请求尝试获取先前锁定的资源时调用。
* 这种机制确保锁仅在必要时持有,并迅速释放以供其他请求使用。
*
* - unlock(id): 释放由 'id' 标识的资源上的锁。锁持有者应在完成操作后或通过 'cancelReq' 回调接收到信号后调用此方法,
* 以释放锁。
*/
export interface Lock {
lock(cancelReq: RequestRelease): Promise<void>
unlock(): Promise<void>
}