Semua,
HTML5 Rocks memiliki tutorial pemula yang bagus tentang Server-sent Events (SSE):
http://www.html5rocks.com/en/tutorials/eventsource/basics/
Namun, saya tidak memahami konsep penting - apa yang memicu peristiwa di server yang menyebabkan pesan terkirim?
Dengan kata lain - dalam contoh HTML5 - server hanya mengirimkan stempel waktu satu kali :
<?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()));
Jika saya sedang membuat contoh praktis - misalnya, "dinding" bergaya Facebook atau ticker saham, di mana server akan "mendorong" pesan baru ke klien setiap kali beberapa bagian data berubah, bagaimana cara kerjanya?
Dengan kata lain ... Apakah skrip PHP memiliki loop yang berjalan terus menerus, memeriksa perubahan dalam data, lalu mengirim pesan setiap kali ditemukan? Jika ya - bagaimana Anda tahu kapan harus mengakhiri proses itu?
Atau - apakah skrip PHP hanya mengirim pesan, lalu diakhiri (seperti yang terlihat pada contoh HTML5Rocks)? Jika demikian - bagaimana Anda mendapatkan pembaruan berkelanjutan? Apakah browser hanya memeriksa halaman PHP secara berkala? Jika demikian - bagaimana bisa disebut "event server-sent"? Apa bedanya dengan menulis fungsi setInterval di JavaScript yang menggunakan AJAX untuk memanggil halaman PHP pada interval reguler?
Maaf - ini mungkin pertanyaan yang sangat naif. Tapi tidak ada contoh yang bisa saya temukan yang menjelaskan hal ini.
[MEMPERBARUI]
Saya pikir pertanyaan saya kurang tepat, jadi inilah beberapa klarifikasinya.
Katakanlah saya memiliki halaman web yang seharusnya menampilkan harga saham Apple terbaru.
Saat pengguna pertama kali membuka halaman, halaman membuat EventSource dengan URL "aliran" saya.
var source = new EventSource('stream.php');
Pertanyaan saya adalah - bagaimana seharusnya "stream.php" bekerja?
Seperti ini? (pseudo-code):
<?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
}
?>
Dengan kata lain - apakah "stream.php" tetap terbuka selama klien "terhubung" dengannya?
Jika demikian - apakah itu berarti Anda memiliki banyak utas yang berjalan stream.php
sebanyak Anda memiliki pengguna bersamaan? Jika demikian - apakah itu memungkinkan, atau cara yang tepat untuk membangun aplikasi? Dan bagaimana Anda tahu kapan Anda bisa MENGAKHIRI sebuah instance stream.php
?
Kesan naif saya adalah, jika ini masalahnya, PHP bukanlah teknologi yang cocok untuk jenis server ini. Tetapi semua demo yang saya lihat sejauh ini menyiratkan bahwa PHP baik-baik saja untuk ini, itulah sebabnya saya sangat bingung ...