Saya telah menghadapi masalah serupa belum lama ini, saya berasumsi bahwa Anda menggunakan mysql atau sesuatu untuk sisi server penyimpanan komentar Anda?
Saya memecahkan masalah saya dengan terlebih dahulu menambahkan kolom integer timestamp ke tabel mysql saya, kemudian ketika saya menambahkan baris baru, saya cukup menggunakan time()
untuk menghemat waktu saat ini.
contoh sisipan baris mysql:
$query = "INSERT INTO comments (name, text, timestamp) VALUES ('". $name ."', '". $text ."',". time() .");";
langkah kedua adalah json_encode data yang Anda kirim dari sisi server:
$output = array();
if ($html && $html !== '') { // do we have any script output ?
$output['payload'] = $html; // your current script output would go in this variable
}
$output['time'] = time(); // so we know when did we last check for payload update
$json = json_encode($output, ((int)JSON_NUMERIC_CHECK)); // jsonify the array
echo $json; // send it to the client
Jadi, sekarang alih-alih html murni, skrip sisi server Anda mengembalikan sesuatu seperti ini:
{
"payload":"<div class=\"name\">Derpin<\/div><div class=\"msg\">Foo Bar!<\/div>",
"time":1354167493
}
Anda dapat mengambil data dalam javascript cukup sederhana:
<script type="text/javascript"> // <![CDATA[
var lastcheck;
var content_main = $('#content_main');
pollTimer = setInterval(function() {
updateJson();
}, 10000);
function updateJson() {
var request = '/feed_main.php?timestamp='+ (lastcheck ? lastcheck : 0);
$.ajax({
url: request,
dataType: 'json',
async: false,
cache: false,
success: function(result) {
if (result.payload) { // new data
lastcheck = result.time; // update stored timestamp
content_main.html(result.payload + content_main.html()); // update html element
} else { // no new data, update only timestamp
lastcheck = result.time;
}
}
});
}
// ]]> </script>
yang cukup banyak menangani komunikasi antara server dan klien, sekarang Anda hanya meminta database Anda seperti ini:
$timestamp = 0;
$where = '';
if (isset($_GET['timestamp'])) {
$timestamp = your_arg_sanitizer($_GET['timestamp']);
}
if ($timestamp) {
$where = ' WHERE timestamp >= '.$timestamp;
}
$query = 'SELECT * FROM comments'. $where .' ORDER BY timestamp DESC;';
Stempel waktu diteruskan bolak-balik, klien selalu mengirimkan stempel waktu yang dikembalikan oleh server dalam kueri sebelumnya.
Server Anda hanya mengirimkan komentar yang dikirimkan sejak Anda memeriksa terakhir kali, dan Anda dapat menambahkannya ke akhir html seperti yang saya lakukan. (peringatan:saya belum menambahkan kontrol kewarasan apa pun untuk itu, komentar Anda bisa menjadi sangat panjang)
Karena Anda melakukan polling untuk data baru setiap 10 detik, Anda mungkin ingin mempertimbangkan untuk mengirim data murni melalui panggilan ajax untuk menghemat bandwidth chunk yang substansial (string json hanya dengan stempel waktu di dalamnya, hanya sekitar 20 byte).
Anda kemudian dapat menggunakan javascript untuk menghasilkan html, ini juga memiliki keuntungan untuk memindahkan banyak pekerjaan dari server Anda ke klien :). Anda juga akan mendapatkan kontrol yang lebih baik atas berapa banyak komentar yang ingin Anda tampilkan sekaligus.
Saya telah membuat beberapa asumsi yang cukup besar, Anda harus memodifikasi kode agar sesuai dengan kebutuhan Anda. Jika Anda menggunakan kode saya, dan rumah kucing|komputer|Anda meledak, Anda dapat menyimpan semua bagiannya :)