reader-write.go
2024-10-19 06:29:27
package ratelimit
import "io"
type reader struct {
r io.Reader
bucket *Bucket
}
// Reader returns a reader that is rate limited by
// the given token bucket. Each token in the bucket
// represents one byte.
func Reader(r io.Reader, bucket *Bucket) io.Reader {
return &reader{
r: r,
bucket: bucket,
}
}
func (r *reader) Read(buf []byte) (int, error) {
n, err := r.r.Read(buf)
if n <= 0 {
return n, err
}
r.bucket.Wait(int64(n))
return n, err
}
type writer struct {
w io.Writer
bucket *Bucket
}
// Writer returns a reader that is rate limited by
// the given token bucket. Each token in the bucket
// represents one byte.
func Writer(w io.Writer, bucket *Bucket) io.Writer {
return &writer{
w: w,
bucket: bucket,
}
}
func (w *writer) Write(buf []byte) (int, error) {
w.bucket.Wait(int64(len(buf)))
return w.w.Write(buf)
}
最新文章
- Android Studio开发RecyclerView遇到的各种问题以及解决(二)
- es5 and es6
- C语言写的流氓关机程序及破解
- python基础——使用@property
- CODESOFT中的圆角矩形的弧度该怎样设置?
- GitHub指南
- css,html命名规则
- ECSHOP文件目录详解
- node.js&;mongodb&;express 搭建个人博客系统
- Jenkins的plugin开发
- error2
- DAY:3 列表
- cent os安装filebeat
- Java 集合并交补
- linQ to sql 查询生成的sql语句
- 31、Flask实战第31天:cms后台修改密码
- 【BZOJ2326】【HNOI2011】数学作业 [矩阵乘法][DP]
- 分布式_事务_01_2PC框架raincat快速体验1
- DAY16-Django之MTV
- 【Linux】tcp缓冲区大小的默认值、最大值
热门文章
- ASP.NET Core 2.0 使用NLog实现日志记录
- Spring消息之WebSocket
- python结巴(jieba)分词
- 2017 Gartner数据科学魔力象限出炉,16位上榜公司花落谁家?
- JS跨域:2.解决方案之-设置回调参数
- FastDfs上传图片
- 基于.net的爬虫应用-DotnetSpider
- 团队项目第二阶段个人进展——Day9
- Nordic nRF51/nRF52开发环境搭建
- QT中的相对位置,绝对位置之间的转换(maptoglobal,mapfromglobal)