Giter Club home page Giter Club logo

Comments (10)

clue avatar clue commented on May 21, 2024 2

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.

arunpoudel avatar arunpoudel commented on May 21, 2024

You can probably do a $loop->tick() to force it to process the buffer.

from http.

thestanislav avatar thestanislav commented on May 21, 2024

Thanks, seems that works

from http.

thestanislav avatar thestanislav commented on May 21, 2024

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.

thestanislav avatar thestanislav commented on May 21, 2024

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.

clue avatar clue commented on May 21, 2024

The Stream will close the resource for you once it ends, so you should remove this:

-fclose($fp);

from http.

thestanislav avatar thestanislav commented on May 21, 2024

Same thing.
I'm getting zero length response :(

from http.

thestanislav avatar thestanislav commented on May 21, 2024

After some debug I found out that in my example Stream::handleData is never called.

from http.

thestanislav avatar thestanislav commented on May 21, 2024

$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.

WyriHaximus avatar WyriHaximus commented on May 21, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.