feat(traffic): support limit task worker count & file stream rate (#7948)
* feat: set task workers num & client stream rate limit * feat: server stream rate limit * upgrade xhofe/tache * .
This commit is contained in:
@ -1,7 +1,9 @@
|
||||
package middlewares
|
||||
|
||||
import (
|
||||
"github.com/alist-org/alist/v3/internal/stream"
|
||||
"github.com/gin-gonic/gin"
|
||||
"io"
|
||||
)
|
||||
|
||||
func MaxAllowed(n int) gin.HandlerFunc {
|
||||
@ -14,3 +16,37 @@ func MaxAllowed(n int) gin.HandlerFunc {
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
||||
func UploadRateLimiter(limiter stream.Limiter) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
c.Request.Body = &stream.RateLimitReader{
|
||||
Reader: c.Request.Body,
|
||||
Limiter: limiter,
|
||||
Ctx: c,
|
||||
}
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
||||
type ResponseWriterWrapper struct {
|
||||
gin.ResponseWriter
|
||||
WrapWriter io.Writer
|
||||
}
|
||||
|
||||
func (w *ResponseWriterWrapper) Write(p []byte) (n int, err error) {
|
||||
return w.WrapWriter.Write(p)
|
||||
}
|
||||
|
||||
func DownloadRateLimiter(limiter stream.Limiter) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
c.Writer = &ResponseWriterWrapper{
|
||||
ResponseWriter: c.Writer,
|
||||
WrapWriter: &stream.RateLimitWriter{
|
||||
Writer: c.Writer,
|
||||
Limiter: limiter,
|
||||
Ctx: c,
|
||||
},
|
||||
}
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user