From: qydysky Date: Mon, 31 May 2021 14:58:04 +0000 (+0800) Subject: limit fix X-Git-Tag: v0.5.18 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=1a4e8e5c6299c46c505d4048cc87b02c3cbca06d;p=part%2F.git limit fix reqf fix --- diff --git a/limit/Limit.go b/limit/Limit.go index 2907bb6..9d9a4e3 100644 --- a/limit/Limit.go +++ b/limit/Limit.go @@ -26,8 +26,7 @@ func New(maxNum_in_period,ms_in_period,ms_to_timeout int) (*Limit) { go func(object *Limit){ for object.maxNum_in_period > 0 { - object.bucket <- struct{}{} - for i:=1;i 0 { c = time.NewTimer(time.Millisecond*time.Duration(ReadTimeout)).C + } else if ReadTimeout < 0 { + tc := make(chan time.Time,1) + tc <- time.Now() + close(tc) + c = tc } return } diff --git a/reqf/Reqf.go b/reqf/Reqf.go index a9763d1..0a215c2 100644 --- a/reqf/Reqf.go +++ b/reqf/Reqf.go @@ -7,6 +7,7 @@ import ( "context" "time" "strings" + "bytes" "net/http" "errors" "io/ioutil" @@ -170,16 +171,19 @@ func (this *Req) Reqf_1(val Rval) (err error) { } var ( - saveToFile func(io.Reader,string)error = func (Body io.Reader,filepath string) error { + saveToFile func(io.Reader,string)([]byte,error) = func (Body io.Reader,filepath string) (bodyB []byte,err error) { out, err := os.Create(filepath + ".dtmp") - if err != nil {out.Close();return err} + if err != nil {out.Close();return bodyB,err} + var buf bytes.Buffer - if _, err = io.Copy(out, Body); err != nil {out.Close();return err} + w := io.MultiWriter(out, &buf) + if _, err = io.Copy(w, Body); err != nil {out.Close();return bodyB,err} out.Close() + bodyB = buf.Bytes() - if err = os.RemoveAll(filepath); err != nil {return err} - if err = os.Rename(filepath+".dtmp", filepath); err != nil {return err} - return nil + if err = os.RemoveAll(filepath); err != nil {return bodyB,err} + if err = os.Rename(filepath+".dtmp", filepath); err != nil {return bodyB,err} + return bodyB,nil } ) this.Response = resp @@ -213,8 +217,27 @@ func (this *Req) Reqf_1(val Rval) (err error) { } } else { if SaveToPath != "" { - if err := saveToFile(resp.Body, SaveToPath); err != nil { + if bodyB,err := saveToFile(resp.Body, SaveToPath); err != nil { return err + } else { + if len(bodyB) != 0 { + if SaveToChan != nil { + SaveToChan <- bodyB + } else if SaveToPipeWriter != nil { + SaveToPipeWriter.Write(bodyB) + } else { + this.Respon = append(this.Respon,bodyB...) + } + } else { + return io.EOF + } + + if SaveToChan != nil { + close(SaveToChan) + } + if SaveToPipeWriter != nil { + SaveToPipeWriter.Close() + } } } else { rc,_ := pio.RW2Chan(resp.Body,nil)