Comments (7)
Are we talking about a server handler or a client response?
from fasthttp.
Server handler
Groetjes,
from fasthttp.
I think this is good feature, for some server applications that handle large of requests and the buffer was cached, using SetBodyRaw
to get high performance but currently, will unsafe release the buffer.
Quick to workaround push the buffer that need release into batcher and process in the after.
If support callback or closer interface,... when write the response body completed get will helpful in this case.
from fasthttp.
I've looked at the code for a bit and I think that my use-case is satisfied by using SetBodyStream()
and passing an io.Closer, which gets called when I can free my underlying data.
As far as I can see (by reading the source) both cause exactly one copy when my data gets copied into the writeBuffer to be sent to the client.
Would that work for you too @pisken?
from fasthttp.
I see SetBodyStream
not resolve for large of requests when data body available (caching), and SetBodyRaw
can resolve for this case.
In this case large of request and data body response was cached, I need write body direct to connection client, no copy to other buffer to keep low memory and cpu used.
from fasthttp.
AAUI it actually copies in exactly the same scenarios.
There is always a *bufio.Writer (managed by a sync.Pool): https://github.com/valyala/fasthttp/blob/master/server.go#L2407 So during the writing of the request, that memory is allocated.
Write gets that *bufio.Writer which already has the headers written to it.
bodyBytes returns the []byte that you passed to SetBodyRaw, and then writes it to the *bufio.Writer. Unless 1) the *bufio.Writer is empty, and 2) your []byte is larger than its size, it'll copy the data.
You can ensure the buffer is empty by setting ImmediateHeaderFlush on the response, but that's at the cost of an extra syscall (for non-HTTPS), which might or might not be more expensive than copying the bytes.
For SetBodyStream (assuming you've set the contentLength), you'll end up in writeBodyStream here which will call io.CopyBuffer(), which will call YourBodyStream.WriteTo, which can do a single large write, just like the SetBodyRaw case.
from fasthttp.
Sounds like a good idea, a pull request is welcome!
from fasthttp.
Related Issues (20)
- Accessing some context in a `RoundTripper` HOT 2
- Ignoring Requests with Long URI HOT 2
- question: Add user level value to connection? HOT 1
- FastHTTP doesn't validate HTTP versions HOT 2
- application/octet-stream header gets added by default in case of a DELETE request without body HOT 4
- question regarding header parsing HOT 1
- sse panic on fasthttphandler HOT 1
- [BUG?]: SSE Handler with Fiber web framework, any http client I have implemented cannot connect.
- Question: Add client.MaxResponseBody*Read*Size? HOT 2
- Bug: fasthttp client connect to Vite dev server on localhost, tcp4 127.0.0.1:5173: connect: connection refused HOT 2
- Support for Prometheus HOT 1
- CloseOnShutdown dont work? HOT 3
- how can i use fasthttp bare minimum "net" library only without routing through the http overhead? just pure tcp rpc stuff will do HOT 1
- What is a correct way to create a proper fasthttp.RequestCtx in the unit tests? HOT 1
- Timeout stream response connection does not clear buffer data for re-use HOT 2
- Propagate request error to RetryIfFunc HOT 1
- Expose `timeout` field in Request HOT 1
- NewFastHTTPHandler does not set response status code. HOT 1
- NewFastHTTPHandler does not set response status code HOT 7
- Error when serving connection "x.x.x.x:443"<->"172.56.198.126:18271": EOF HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fasthttp.