सब,
HTML5 रॉक्स में सर्वर द्वारा भेजे गए घटनाओं (SSE) पर एक अच्छा शुरुआत ट्यूटोरियल है:
http://www.html5rocks.com/en/tutorials/eventsource/basics/
लेकिन, मुझे एक महत्वपूर्ण अवधारणा समझ में नहीं आती है - क्या उस सर्वर पर घटना को ट्रिगर करता है जो संदेश भेजने का कारण बनता है?
दूसरे शब्दों में - HTML5 उदाहरण में - सर्वर केवल एक बार टाइमस्टैम्प भेजता है :
<?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()));
यदि मैं एक व्यावहारिक उदाहरण का निर्माण कर रहा था - उदाहरण के लिए, एक फेसबुक-शैली "दीवार" या स्टॉक-टिकर, जिसमें सर्वर हर बार क्लाइंट को एक नया संदेश "पुश" करेगा, जब कोई डेटा परिवर्तन होता है, तो वह कैसे काम करता है?
दूसरे शब्दों में ... क्या PHP स्क्रिप्ट में एक लूप होता है जो लगातार चलता रहता है, डेटा में बदलाव के लिए जाँच करता है, फिर हर बार एक संदेश भेजने पर यह एक मिल जाता है? यदि हां - तो आप कैसे जानते हैं कि उस प्रक्रिया को कब समाप्त करना है?
या - क्या PHP स्क्रिप्ट केवल संदेश भेजती है, फिर अंत (जैसा कि HTML5Rocks उदाहरण में मामला प्रतीत होता है)? यदि हां - तो आपको लगातार अपडेट कैसे मिलते हैं? क्या ब्राउज़र नियमित अंतराल पर केवल PHP पृष्ठ को मतदान कर रहा है? यदि हां - तो यह "सर्वर द्वारा भेजी गई घटना" कैसे है? यह जावास्क्रिप्ट में setInterval फ़ंक्शन लिखने से कैसे अलग है जो नियमित अंतराल पर PHP पेज को कॉल करने के लिए AJAX का उपयोग करता है?
क्षमा करें - यह शायद एक अविश्वसनीय भोला सवाल है। लेकिन कोई भी उदाहरण मुझे नहीं मिला है जो इसे स्पष्ट कर सके।
[अपडेट करें]
मुझे लगता है कि मेरा प्रश्न खराब था, इसलिए यहां कुछ स्पष्टीकरण दिया गया है।
मान लीजिए कि मेरे पास एक वेब पेज है, जिसे ऐप्पल के स्टॉक की सबसे नवीनतम कीमत प्रदर्शित करनी चाहिए।
जब उपयोगकर्ता पहली बार पृष्ठ खोलता है, तो पृष्ठ मेरे "स्ट्रीम" के URL के साथ एक EventSource बनाता है।
var source = new EventSource('stream.php');
मेरा सवाल यह है - "स्ट्रीम। एफपी" को कैसे काम करना चाहिए?
ऐशे ही? (छद्म कोड):
<?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
}
?>
दूसरे शब्दों में - क्या "स्ट्रीम। एफपी" तब तक खुला रहता है जब तक ग्राहक उससे "जुड़ा हुआ" है?
यदि हां - तो क्या इसका मतलब है कि stream.php
आपके पास समवर्ती उपयोगकर्ताओं के रूप में चलने वाले कई धागे हैं ? यदि ऐसा है - क्या वह दूरस्थ रूप से संभव है, या एप्लिकेशन बनाने के लिए एक उपयुक्त तरीका है? और कैसे पता चलेगा जब आप एक उदाहरण के अंत कर सकते हैं stream.php
?
मेरी अनुभवहीन धारणा यह है कि, यदि यह मामला है, तो PHP इस तरह के सर्वर के लिए उपयुक्त तकनीक नहीं है। लेकिन सभी डेमो मैंने अभी तक स्पष्ट रूप से देखा है कि PHP इसके लिए ठीक है, यही वजह है कि मैं इतना भ्रमित हूं ...