[PHP] Synchronizacja danych wysyłania danych

0

Czesc,

Mam o to taki program w PHP:

<?php 

$s = fopen('http://zrock.atlantis.bg:8000/zrock.ogg', 'rb'); 

foreach ($http_response_header as $h) header($h); 

$time = time(); 

while ((time()-$time) < 30) { 
   echo fread($s, 1024); 
} 

fclose($s); 

?>

Gdy go uruchamiam przeglądarka odczekuje 10 sekund po czym wyświetla oba czasy na raz.
Jak zrobić aby wyjście było asynchroniczne i pierwszy czas zostawał wysłany przez serwer natychmiast, a dopiero drugi po 10 sekundach?

Pozdrawiam.

pawelWla napisał(a)

Czesc,

Mam o to taki program w PHP:

<?php

// current time
echo date('h:i:s') . "\n";

// sleep for 10 seconds
sleep(10);

// wake up !
echo date('h:i:s') . "\n";

?>

Gdy go uruchamiam przeglądarka odczekuje 10 sekund po czym wyświetla oba czasy na raz.
Jak zrobić aby wyjście było asynchroniczne i pierwszy czas zostawał wysłany przez serwer natychmiast, a dopiero drugi po 10 sekundach?

Pozdrawiam.

EDIT: Przepraszam, wkleiłem nie to zródło.

0

Na samym początku:

header('Content-type: text/plain')

Po każdym echo (z "\n" na końcu):

flush()

Jeżeli nie będzie text/plain i "\n", to przeglądarka może mimo flush() nic nie wyświetlić przed załadowaniem bufora. Z tego, co pamiętam, niektóre przeglądarki mimo tego nic nie wyświetlają.

0

Problem w tym, że próbowałem również odpytać serwer przy pomocny telnet'u i też odpowiedz przychodziła po 10 sekundach. Także to nie problem w bufforowaniu po stronie przeglądarki.

0

Ok, dzięki - flush() załatwił sprawę.

Co się dzieje w takim przypadku z nagłówkiem? content-lenght? Przecież w przypadku takiego skryptu, niemożemy podać długości pliku ponieważ na chwile wysyłania nagłówa nie jest jeszcze znany.

Czy pisząc w php program z nieskończoną pętlą możemy streamować dane przez HTTP? :)

Pozdrawiam i dzkięki za pomoc. :)

0

Nie ma obowiązku podawania content-length, skrypt php po prostu tego nie robi.

Z nieskończonymi pętlami w php nie wyjdzie - to nie jest narzędzie do tego. Po ustalonym czasie na większości serwerów skrypt zostanie zabity. Nawet po wyłączeniu tego, to nie będzie działać tak dobrze, jak jakieś normalne rozwiązanie.

0

Althru, można to zrobić na serwerze który nie zabija skryptów + pozwala na:
set_time_limit(0);

0

W takim razie co proponujecie do zaimplementowania prostego streamingu via HTTP?

0

Prosty serwer HTTP własnej roboty. Przeoptymalne rozwiązanie.

0

Wydaje mi się, że nawet najprosty serwer HTTP jest dość skomplikowany w implementacji, już nawet nie biorąc pod uwage wydajności własnego kodu. Nie ma jakiegoś rozwiązania, dzięki któremu można użyć np Apache? Generalnie, potrzebuje czegoś co umożliwi mi generowanie plików na żądanie. Serwer otrzymuje żadanie od klienta ze specyfikacja i zaczyna tworzyć plik wysyłając od razu gotową część pliku, dzięki czemu klient od razu może zacząć przetwarzać plik nie czekając aż w całości zostanie wygenerowana na serwerze.

Jakieś inne pomyśly? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1