मेरे पास एक PHP सर्वर फ़ाइल और एक HTML क्लाइंट फ़ाइल है, HTML फ़ाइल प्रत्येक 500 ms
डेटा पुनर्प्राप्त करने के लिए सर्वर पर AJAX अनुरोध भेजती है, हालांकि यह अपेक्षा करता है कि यह क्लाइंट के डिवाइस पर स्मृति और CPU का उच्च उपयोग कर रहा है।सर्वर से क्लाइंट में डेटा भेज रहा है?
पीएचपी
if(isset($_POST['id']) && $_POST['id'] != '')
{
$id = $_POST['id'];
$select = $con->prepare("SELECT * FROM data WHERE id=?");
$select->bind_param('s', $id);
$select->execute();
$result = $select->get_result();
while($row = $result->fetch_assoc())
{
echo $row['column 1'] . "\t" . $row['column 2'] . "\n";
}
}
AJAX
function send(){
var formdata = new FormData(),
id = document.getElementById('id').value;
formdata.append('id', id);
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xhr.open('post', 'server.php', true);
xhr.send(formdata);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
console.log(xhr.responseText);
}
}
}
setInterval(function(){send()}, 500);
मैं बजाय एक ही डेटा ज्यादातर समय सर्वर से कई अनुरोध भेजने और पुन: प्राप्त करने की, ajax के लिए एक विकल्प समाधान खोजने के लिए चाहते हैं, यह होगा यदि सर्वर डेटा परिवर्तन या अद्यतन पर क्लाइंट के साथ बातचीत कर सकता है तो अधिक कुशल बनें।
मैं PHP Socket
या HttpRequest
मेडथोड्स का उपयोग नहीं कर सकता क्योंकि वे मेरे होस्टिंग सर्वर पर स्थापित नहीं हैं और मुझे यकीन नहीं है कि बाद के काम क्या हैं। एकमात्र तरीका जिसे मैं सोच सकता हूं SESSIONS
का उपयोग कर रहा है।
this के अनुसार PHP सर्वर सर्वर पर एक ही निर्देशिका पर सभी उपयोगकर्ता सत्रों को स्टोर करता है, इसलिए फ़ाइल पर किसी विशेष उपयोगकर्ता के लिए सत्र चर बदलना संभव हो सकता है। समस्या यह है कि उन फ़ाइलों में डेटा क्रमबद्ध है और मुझे यकीन नहीं है कि डेटा को डी-सीरियलाइज़ कैसे करें और उन्हें फिर से क्रमबद्ध करें और फिर नया डेटा सहेजें!
यहां तक कि अगर मैं सत्र फ़ाइल पर अपडेट स्टोर करने के लिए एक रास्ता खोजने के लिए सक्षम था, मैं अभी भी setInterval उपयोग करने के लिए हालांकि यह आदर्श नहीं है सत्र की चर परिवर्तन हर 500ms
को सुनने के लिए की जरूरत है, लेकिन यह में XMLHttpRequest
का उपयोग कर की तुलना में काफी बेहतर होगा स्मृति और सीपीयू उपयोग की शर्तें।
तो ऐसा करने का सबसे अच्छा तरीका क्या है? कोई भी सहायताकाफी प्रशंसनीय होगी।
अद्यतन:
मुझे एहसास हुआ SESSION
अभ्यस्त काम है क्योंकि यह केवल सर्वर नहीं ग्राहक द्वारा पढ़ा जा सकता है, इसलिए मैं चर प्राप्त करने के लिए सर्वर के लिए ajax अनुरोध भेजने के लिए है जो मैं बचने की कोशिश कर रहा था।
मैंने लंबे मतदान की कोशिश की लेकिन मुझे इसके साथ कई समस्याएं थीं, flush
और ob_flush()
मेरे सर्वर पर काम नहीं करता है और मैं ini
सेटिंग्स को नहीं बदल सकता। जब अनंत लूप की कोशिश कर रहा मैं इसे डेटा परिवर्तन पर तोड़ने के लिए नहीं मिल सकता है:
if(isset($_GET['size']) && $_GET['size'] != '')
{
$size = (int)$_GET['size'];
$txt = "logs/logs.txt";
$newsize = (int)filesize($txt);
while(true) {
if($newsize !== $size) {
$data = array("size" => filesize($txt), "content" => file_get_contents($txt));
echo json_encode($data);
break;
}
else{
$newsize = (int)filesize($txt);
usleep(400000);
}
}
}
यह, पर और पर जा रहा logs.txt
आकार में वृद्धि भले ही इसे तोड़ने नहीं होते रहता है! मैं आकार को बढ़ाने पर डेटा कैसे तोड़ सकता हूं और गूंज सकता हूं?
अद्यतन 2:
इसे बाहर php कैश फ़ाइल आकार बदल गया जब filesize()
विधि बुला इसलिए ऊपर पाश अनिश्चित काल तक चलने होगा, उस के लिए समाधान clearstatcache()
विधि है जो उपयोग करने के लिए की संग्रहित कैश भी साफ हो जाएगा है फाइल आकार लूप को फाइलसाइज परिवर्तनों को तोड़ने की इजाजत देता है।
कितनी बार आप अपनी प्रतिक्रिया डेटा को बदलने की उम्मीद करते हैं देखते हैं? –
यह भिन्न होता है, यह हर 10 सेकंड में या एक बार हर 10 मिनट में एक बार हो सकता है – razzak
परिणाम सेट कितने बड़े हैं? केबी में? – hek2mgl