Comments (10)
Hi @thestanislav, thanks for your question! What you're looking for is piping a source stream into the destination like this:
$source = new Stream($fp, $loop);
$source->pipe($response);
This controls back-pressure internally: It will make sure the $source
will be pause()
'd when the destination is not fast enough and starts buffering. It will automatically resume()
reading from the $source
once the buffer is drained.
I hope this helps 👍
Note: The filesystem is inherently blocking, so it's best to avoid any fopen()
calls to begin with. But you may get away with this like this.
from http.
You can probably do a $loop->tick()
to force it to process the buffer.
from http.
Thanks, seems that works
from http.
But after some time I have got this:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65393860 bytes) in vendor/react/stream/src/Buffer.php on line 118
from http.
Hi, @clue . Can you help me with more descriptive example?
$http->on('request', function ($request, $response) use($loop) {
$response->writeHead(200, array('Content-Type' => 'video/mp4'));
$fp = fopen('Path/to/some/real/big/video.mp4', 'r');
$source = new Stream($fp, $loop);
$source->pipe($response);
fclose($fp);
$response->end();
});
What I am missing?
from http.
The Stream
will close the resource for you once it ends, so you should remove this:
-fclose($fp);
from http.
Same thing.
I'm getting zero length response :(
from http.
After some debug I found out that in my example Stream::handleData is never called.
from http.
$loop->run() helped. Not sure this is a right way.
$http->on('request', function ($request, $response) use($loop) {
$response->writeHead(200, array('Content-Type' => 'video/mp4'));
$fp = fopen('Path/to/some/real/big/video.mp4', 'r');
$source = new Stream($fp, $loop);
$source->pipe($response);
$loop->run();
fclose($fp);
$response->end();
});
from http.
Try this:
$http->on('request', function ($request, $response) use($loop) {
$response->writeHead(200, array('Content-Type' => 'video/mp4'));
$fp = fopen('Path/to/some/real/big/video.mp4', 'r');
$source = new Stream($fp, $loop);
$source->pipe($response);
});
When calling $response->end();
the entire response stream is closed. $source->pipe($response);
will do that for you once the file has been completely read and piped into the response.
from http.
Related Issues (20)
- Preserve method on redirect HOT 1
- Memory leak? HOT 8
- Possible memory leak when using Queue HOT 6
- HTTP client: Expose maximum time to keep alive idle connection with persistent connections HOT 5
- Cannot create socket server HOT 3
- HTTP client on specific network shows poor performance HOT 5
- HTTP client: Simplify HTTP file uploads and submitting forms HOT 1
- EmptyBodyStream as request body not working HOT 3
- Regression: object with __toString no longer being accepted as request body in Browser post HOT 1
- getFragment() returns empty string, username:password@hostname not supported HOT 1
- Unable to properly cancel request (Browser) HOT 8
- URI Behind Reverse Proxy Incorrect Scheme HOT 5
- Laravel + websockets: Unhandled promise rejection with TypeError HOT 1
- MAX_CHUNK_HEADER_SIZE size increase HOT 4
- Random HTTP Requests don't resolve HOT 2
- Body Stream Closes when running Browser Request HOT 3
- The psr/http-message v2 is not supported HOT 1
- Add support for psr/http-message v2
- Memory leak when using persistent connections HOT 3
- Roadmap to reactphp/http v3
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 http.