Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1
membuat notification
saya membuat notification. setiap detik ngecek db, ada gak notification yg blum di baca. jadi setiap menjalankan menu apapun, itu kan ngecek trus setiap detik
saya pke codeigniter
logikanya seperti ini :
javascript :
//call sync notification
sync_notification();
function sync_notification()
{
// alert(base_url);
$.ajax({
url : base_url+"dashboard/sync?token="+Math.random()+new Date().getTime(),
success:function(result)
{
if(result)
{
var data, count_notification;
data = JSON.parse(result);
count_notification = data.length;
document.getElementById("count_notif").innerHTML = count_notification;
htmlData = '';
for(var i=0;i<data.length;i++){
htmlData += '<li>'
+ '<a href='+base_url+'notification/notif/'+data[i].notification_id+'>'
+ '<span class="time">just now</span>'
+ '<span class="details">'
+ '<span class="label label-sm label-icon label-info">'
+ '<i class="fa fa-bookmark"></i>'
+ '</span>'+ data[i].notification_message +'.'
+ '</span>'
+ '</a>'
+ '</li>';
}
$('#body_notification').html(htmlData);
}
sync_notification();
}
});
}
controller :
public function sync()
{
//only ajax request are allowed
$this->input->is_ajax_request() OR exit('No direct access allowed!');
$session = $this->session->userdata('login');
$i = 0;
//create infine loop until generate new transaction and timeout for 1secs for each request
for($i = 0; $i < 30; $i++)
{
$exist = $this->dashboard_model->check_notification($session['login_id']);
//check if there is new transaction
if($exist)
{
//exist die process
echo json_encode($exist);
die;
}
//wait for 1 seconds for each loop
sleep(1);
}
if($i == 30)
{
//stop javascript will make another ajax to this function
echo 0;
}
}
model :
public function check_notification($login_id)
{
$sql = "SELECT notification_id, notification_message
FROM notification
WHERE notification_status = 0 AND notification_recipient = ?
ORDER BY notification_id DESC";
$result = $this->db->query($sql, array($login_id))->result_array();
if(isset($result[0]))
{
//means there is new data
return $result;
}
else
{
//return no data
return FALSE;
}
}
keterangan :
notification_status = 0 : blum dibaca
notification_status = 1 : sudah dibaca
apa cara ini sudah efektif?
atau ada cara lain yg lebih efektif?
saya pke codeigniter
logikanya seperti ini :
javascript :
//call sync notification
sync_notification();
function sync_notification()
{
// alert(base_url);
$.ajax({
url : base_url+"dashboard/sync?token="+Math.random()+new Date().getTime(),
success:function(result)
{
if(result)
{
var data, count_notification;
data = JSON.parse(result);
count_notification = data.length;
document.getElementById("count_notif").innerHTML = count_notification;
htmlData = '';
for(var i=0;i<data.length;i++){
htmlData += '<li>'
+ '<a href='+base_url+'notification/notif/'+data[i].notification_id+'>'
+ '<span class="time">just now</span>'
+ '<span class="details">'
+ '<span class="label label-sm label-icon label-info">'
+ '<i class="fa fa-bookmark"></i>'
+ '</span>'+ data[i].notification_message +'.'
+ '</span>'
+ '</a>'
+ '</li>';
}
$('#body_notification').html(htmlData);
}
sync_notification();
}
});
}
controller :
public function sync()
{
//only ajax request are allowed
$this->input->is_ajax_request() OR exit('No direct access allowed!');
$session = $this->session->userdata('login');
$i = 0;
//create infine loop until generate new transaction and timeout for 1secs for each request
for($i = 0; $i < 30; $i++)
{
$exist = $this->dashboard_model->check_notification($session['login_id']);
//check if there is new transaction
if($exist)
{
//exist die process
echo json_encode($exist);
die;
}
//wait for 1 seconds for each loop
sleep(1);
}
if($i == 30)
{
//stop javascript will make another ajax to this function
echo 0;
}
}
model :
public function check_notification($login_id)
{
$sql = "SELECT notification_id, notification_message
FROM notification
WHERE notification_status = 0 AND notification_recipient = ?
ORDER BY notification_id DESC";
$result = $this->db->query($sql, array($login_id))->result_array();
if(isset($result[0]))
{
//means there is new data
return $result;
}
else
{
//return no data
return FALSE;
}
}
keterangan :
notification_status = 0 : blum dibaca
notification_status = 1 : sudah dibaca
apa cara ini sudah efektif?
atau ada cara lain yg lebih efektif?
Tagged:
Comments
apa lagi kalo yg request banyak client
cara ndak masalah
soalnya tergantung butuh data dan alur proses
kalo hasilnya sesuai kebutuhan, ya silakan dipake
jadi gak semua orang bisa akses
tapi ada cara lain?
setahu aku, klo notification memang ngeceknya tiap detik, walaupun memberatkan server
itu gammu yg pasti cuma 1 biji di server yg sama
monitoring network traffic aja ndak per 1 detik mas
redundant banget
oya, aku mau nanya lagi nih.
klo pas manggil/proses ajax nya, aku buka halaman / menu baru, jadi lambat banget ya?
apa memang begitu?
atau ada solusi lain untuk solve masalah ini?
soalnya request sebelumnya harusnya otomatis langsung diputus
tapi tergantung browsernya juga
bagaimana browser itu meng-handle proses request nya
ini sudah dibandingkan bbrp browser ?
sama semua ?
saya bandingkan chrome dan mozilla
jadi masalahnya yg ini :
coba cek di sini :
public function sync()
{
//only ajax request are allowed
$this->input->is_ajax_request() OR exit('No direct access allowed!');
$session = $this->session->userdata('login');
$i = 0;
//create infine loop until generate new transaction and timeout for 1secs for each request
for($i = 0; $i < 30; $i++)
{
$exist = $this->dashboard_model->check_notification($session['login_id']);
//check if there is new transaction
if($exist)
{
//exist die process
echo json_encode($exist);
die;
}
//wait for 1 seconds for each loop
sleep(1);
}
if($i == 30)
{
//stop javascript will make another ajax to this function
echo 0;
}
}
itu klo pas check notification, gak ada notifikasi yg blum di baca, itu bakal nunggu selama 30 detik
jadi proses loading ajax yg di console, selaman 30 detik
nah, pas selama 30 detik itu, trus aku buka menu/halaman lain, loading nya lama banget
bisa 22-25 detik
klo aku lihat, ini karena pas lagi proses loading ajax blum selesai, buka halaman lain. makanya jadi lama. cuman aku blum nemu solusinya
klo ada notifikasi yg blum di baca, itu bakal ngecek tiap detik
klo gak ada notifikasi yg blum di baca, itu bakal ngecek tiap 30 detik
tapi masa delay nya di php nya ?
cek ada pesan atau kagak kan di client
+->client/detik request->server baca data & respon->client tampilkan -+
|---------------------------------------------------------------------|
seandai elo mau bikin delay, itu ya di client mas'e
seandai ada pilihan 1 atau 30 detik ya di client
masa delay di server ?
server mah yg penting respon
terserah client mau request kapan saja
aku pke model begini :
sync_notification();
function sync_notification()
//do your AJAX stuff here
}
setInterval(sync_notification, 30000); //30000 s
gitu kan master?
oya, aku mau nanya lagi nih
di system aku kan udah di set, setiap panggil ajax, akan tampil icon loading
nah, masalahnya klo notification kan, dia bakal panggil ajax setiap beberapa detik
otomatis pas manggil ajax, itu bakal loading
gimana caranya bikin exception?
jadi kusus untuk panggil ajax notification, itu tidak tampil loading
tapi kan elo pengen waktunya tergantung kondisi
ya elo bikin setinterval berbeda tiap kondisi yg ditemui
gw gak tau maksud elo ini :
"di system aku kan udah di set, setiap panggil ajax, akan tampil icon loading"
secara kalo pake ajax, mau ada gambar loading atau ndak itu ya tergantung yg bikin
mau pake "hiasan" itu atau kagak
per request ajax nya
ndak ada suatu nilai default "di system"
jadinya gw bingung, ini elo membicarakan "system" apa ?
aku pke before send :
...
$.ajax({
url : base_url+"dashboard/sync_notification?token="+Math.random()+new Date().getTime(),
beforeSend : function() {
$.unblockUI();
},
success:function(result)
{
...
jadi gak tampil loading nya, tiap kali panggil ajax notification
cuman yg jadi masalah
misal aku buka menu A
di menu A, sebelum menampilkan isi nya, itu bakal proses ajax dulu
jadi proses ajax untuk menampilkan isi dari menu A
dan pas proses ajax itu bakal loading(ada gambar loading nya gitu)
tapi karena aku pke ini :
beforeSend : function() {
$.unblockUI();
},
di ajax notification, jadi gak tampil gambar loading nya
ada solusi master?
1. ajax untuk menampilkan isi dari menu A (pas proses ajax, tampil loading)
2. ajax untuk menampillkan notification
kalo logika umum ...
request halaman
request notif
terserah mau ajax atau konvensional, sama saja
artinya
saat request halaman, semua request lain dibatalkan, ndak ada request apa pun selain request halaman
kalo mau nampilin "hiasan" loading ... silakan
selesai tampil, baru jalankan ajax yg lain
terserah kalo kali ini "hiasan" nya gak ditampilkan
intinya, ini proses berurut, serial
bukan paralel
jadinya bingung, masalah elo itu apa nya ?
elo pake proses paralel di tempat yg semestinya proses serial ?