Herşey,
HTML5 Rocks, Sunucu Tarafından Gönderilen Olaylar (SSE) hakkında güzel bir başlangıç eğitimine sahiptir:
http://www.html5rocks.com/en/tutorials/eventsource/basics/
Ancak önemli bir kavramı anlamıyorum - sunucudaki bir mesajın gönderilmesine neden olan olayı tetikleyen nedir?
Başka bir deyişle - HTML5 örneğinde - sunucu yalnızca bir kez zaman damgası gönderir :
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
function sendMsg($id, $msg) {
echo "id: $id" . PHP_EOL;
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));
Pratik bir örnek oluşturuyor olsaydım - örneğin, Facebook tarzı bir "duvar" veya bir hisse senedi, sunucunun her veri parçası değiştiğinde istemciye yeni bir mesaj "göndereceği" bir hisse senedi, bu nasıl çalışır?
Diğer bir deyişle ... PHP betiğinin sürekli olarak çalışan, verilerde bir değişiklik olup olmadığını kontrol eden ve ardından her bulduğunda bir mesaj gönderen bir döngüsü var mı? Öyleyse - bu süreci ne zaman bitireceğinizi nasıl bileceksiniz?
Veya - PHP betiği sadece mesajı gönderiyor ve sonra bitiyor mu (HTML5Rocks örneğinde görüldüğü gibi)? Öyleyse - sürekli güncellemeleri nasıl alırsınız? Tarayıcı, PHP sayfasını düzenli aralıklarla sorguluyor mu? Eğer öyleyse - bu nasıl bir "sunucu tarafından gönderilen olay"? Bunun JavaScript'te bir PHP sayfasını düzenli aralıklarla çağırmak için AJAX kullanan bir setInterval işlevi yazmaktan farkı nedir?
Üzgünüm - bu muhtemelen inanılmaz derecede saf bir soru. Ancak bulabildiğim örneklerin hiçbiri bunu netleştirmiyor.
[GÜNCELLEME]
Sanırım sorum kötü yazılmıştı, işte bazı açıklamalar.
Diyelim ki Apple hisselerinin en son fiyatını göstermesi gereken bir web sayfam var.
Kullanıcı sayfayı ilk açtığında, sayfa "akışımın" URL'siyle bir Etkinlik Kaynağı oluşturur.
var source = new EventSource('stream.php');
Sorum şu - "stream.php" nasıl çalışmalı?
Bunun gibi? (sözde kod):
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
function sendMsg($msg) {
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
flush();
}
while (some condition) {
// check whether Apple's stock price has changed
// e.g., by querying a database, or calling a web service
// if it HAS changed, sendMsg with new price to client
// otherwise, do nothing (until next loop)
sleep (n) // wait n seconds until checking again
}
?>
Başka bir deyişle - istemci "bağlı" olduğu sürece "stream.php" açık kalır mı?
Eğer öyleyse - bu, stream.php
eşzamanlı kullanıcılarınız olduğu kadar çok sayıda iş parçacığınız olduğu anlamına mı geliyor ? Eğer öyleyse - bu uzaktan uygulanabilir mi, yoksa bir uygulama oluşturmanın uygun bir yolu mu? Ve bir örneğini ne zaman sonlandırabileceğinizi nasıl anlarsınız stream.php
?
Saf izlenimim, eğer durum buysa, PHP bu tür bir sunucu için uygun bir teknoloji olmadığıdır . Ancak şimdiye kadar gördüğüm tüm demolar PHP'nin bunun için iyi olduğunu ima ediyor, bu yüzden kafam karıştı ...