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

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?

Comments

  • setiap detik itu terlalu memberatkan server
    apa lagi kalo yg request banyak client

    cara ndak masalah
    soalnya tergantung butuh data dan alur proses
    kalo hasilnya sesuai kebutuhan, ya silakan dipake
  • edited June 2016
    klo sistem yg dibuat sih ditujukan untuk agent, bukan umum
    jadi gak semua orang bisa akses

    tapi ada cara lain?
    setahu aku, klo notification memang ngeceknya tiap detik, walaupun memberatkan server
  • edited June 2016
    gammu buat sms gateway aja gw atur per 10 detik
    itu gammu yg pasti cuma 1 biji di server yg sama

    monitoring network traffic aja ndak per 1 detik mas
    redundant banget
  • ok, mungkin ntar atur 10 detik aja

    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?
  • edited June 2016
    harus nya enggak ...
    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 ?
  • edited June 2016
    udah master
    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
  • edited June 2016
    jadi prosesnya logikanya begini :

    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
  • edited June 2016
    ya, boleh elo bikin delay ...
    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
  • edited June 2016
    oke deh, aku bikin di client

    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
  • edited June 2016
    ya, kira kira gitu ...
    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 ?
  • edited June 2016
    udah solved sih

    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?
  • edited June 2016
    jadi pas buka menu A, itu ada proses 2 ajax
    1. ajax untuk menampilkan isi dari menu A (pas proses ajax, tampil loading)
    2. ajax untuk menampillkan notification
  • edited June 2016
    ini gw sampai berkerut kening tetep bingung :D

    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 ? :D

    elo pake proses paralel di tempat yg semestinya proses serial ?
Sign In or Register to comment.