Search code examples
phpjavascripthtmlcodeigniterlong-polling

Codeigniter LongPolling "while(true)" does not work?


I am currently implementing a long polling function in Codeigniter and have come up a problem.

Lets say I have a normal PHP Controller:

function longpolling()
{
    //PHP Timelimit infinite
    set_time_limit(0);

       while(true){  
                    echo "test";

                   //Sleep 3 Seconds
                     sleep(3);
             }
}

The page is just saying loading when called and does not return "test" instead you get 404 Error after a while.

What am I doing wrong?

Thank you!


Solution

  • You aren't doing anything 'wrong' it's just that php doesn't work the way you're expecting it to.

    If you did it like this:

    $i = 0;
    while ($i < 10)
    {
        echo "Hi There!";
        sleep(2);
        $i++;
    }
    

    It will eventually output lots of Hi There, but not one at a time, rather it will all display at the end of the while loop.

    You could even throw a flush() in there

    $i = 0;
    while ($i < 10)
    {
        echo "Hi There!";
        flush();
        sleep(2);
        $i++;
    }
    

    And you still wont get anything until the very end.

    Because your while(true) never ends you will never see any output, and I assume the browser timeout kicks in? Or the max_execution_time setting is reached?

    Just popped into my head now: It might work if you wrote some data to a file in an infinite loop I have never tried it myself.