カテゴリー
未分類

JavaScript+PHPで無理やりリアルタイム通信

チャットを作っていてひらめいた。

今まではAjaxで連続的にデータを取得したいとき以下のようなコードを書いていた

intvl=500;
t=setInterval(“reload()”,intvl);
function reload(){
    jQuery.get(“url”,function(data){
        煮たり焼いたり(data);
    });
}

一応これでもできるが、これだとそのうち通信しなくなってしまう。

ぼーっとしていてふと思ったのが再帰的方法。なぜ今更思いついたんだろう。

ソースコードを以下のようにすればずっと放置していてもちゃんとデータを取得できる。

function reload(){
    jQuery.get(“url”,function(data){
        煮たり焼いたり(data);
        reload();
    });
}

これでreload()が呼び出されたときにそこから止まることなく連続で取得が始まる。

 

え?サーバーへの負荷?んなもん知らん。

というのもまずいので一応自分なりの対処方法を書いてみる。

以下の方法でサーバーへの負荷を軽減できる。

intvl=500;
function reload(){
    jQuery.get(“url”,function(data){
        煮たり焼いたり(data);
        setTimeout(“reload()”,intvl);
    });
}

intvlの値を大きくすればするほどサーバーへの負荷は減るが更新間隔が長くなる。

setIntervalであればclearIntervalでストップすることができるが、これだと起動してしまうとストップできないように見える。

 

一応対処法がふとひらめいたのでコードにまとめておく。

reloadFlag=true;
intvl=500;

reload();

function reload(){
    if(reloadFlag){
        jQuery.get(“url”,function(data){
            煮たり焼いたり(data);
            setTimeout(“reload()”,intvl);
        });
    }
}

こうしておけばreloadFlagの値をfalseにするだけでreload()を停止することができる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です