2017-03-14 15 views
0

私はWebツールを使っています。 PHP、HTML、MySQLで構築されています。私の必要性は、サーバーの到達可能性を毎回確認することです。これまでは、JQuery-Ajax関数を使って簡単なクエリを送信しようとしましたが、クエリが受信された場合はOKメッセージを表示し、それ以外の場合はエラーメッセージを表示します。この要求はx秒ごとに送信されます。私は、サーバーの到達可能性を判断するための方法よりも優れている方法があるかどうかを知りたいと思います。何らかの理由でサーバがもはやアクティブではないことをクライアント側に知らせたいと思います。サーバー到達可能性を確認してください

これは私がこれまで持っているものです。

クライアント側

<!DOCTYPE html> 
    <head> 
     <script src="assets/js/jquery.js"></script> 
     <link href="https://opensource.keycdn.com/fontawesome/4.7.0/font-awesome.min.css" rel="stylesheet"> 
    </head> 
    <title>Check for MySQL availability</title> 
    <body onload="checking()"> 
     <p style="display: inline;">MySQL</p> 
     <!-- Simple circle colored as orange (determining), red (unavailable) and green (available) --> 
     <p style="display: inline;" id="world"><i class="fa fa-circle" aria-hidden="true"></i></p> 
    </body> 
    <script> 
     function checking(){ 
      var dataString = 'signum=some_string'; 
      $.ajax({ 
       type: "POST", 
       url: "testsql.php", 
       data: dataString, 
       cache: true, 
       timeout: 30000, //Timeout after 30 seconds 
       beforeSend: function(){ 
       //Checking status... (orange) 
       $("#world").html('<i class="fa fa-spinner fa-pulse fa-fw"></i>').css('color', 'orange'); 
       }, 
       error: function() { 
        //Show MySQL as unavailable (red) 
        $("#world").html('<i class="fa fa-circle" aria-hidden="true"></i>').css('color', 'red'); 
       }, 
       success: function(data){ 
        if(!data){ 
         console.err("Error!"); 
         //MySQL is unavailable (red) 
         $("#world").html('<i class="fa fa-circle" aria-hidden="true"></i>').css('color', 'red'); 
        }else if(data){ 
         //MySQL is available (green) 
         console.log("MySQL available!"); 
         $("#world").html('<i class="fa fa-circle" aria-hidden="true"></i>').css('color', 'green'); 
         }else{ 
         //MySQL is unavailable (red) 
         console.err("Error!"); 
         $("#world").html('<i class="fa fa-circle" aria-hidden="true"></i>').css('color', 'red'); 
        } 
       } 
      }); 
      //Send Ajax requests every 3 seconds 
      var t = setTimeout(checking, 3000); 
     } 
    </script> 
    </html> 

注:Is there any way to check reachability test of server in jQueryに提供するソリューションは、私のため

+1

に理想的です。 httpステータスコードを調べることで拡張することができます。具体的には、インターネット接続やデータベース自体が問題であるかどうかを確認することができます。もし 'websockets'や他の' server push technology'を使うことができれば、これをすべて実行して、サーバーにクライアントに通知するようにしてください。しかしそうでなければ、あなたはこの種の「ポーリング」に立ち往生しています。 – Shilly

+0

エラー関数jqXHR、textStatus、errorThrownをキャッチして試してみましたが、エラーがあることを知ることでクライアントが認識できるようになっていることがわかります。私はWebSocketの実装についてさらに調査します。洞察に感謝します。 –

答えて

1

を動作しませんでしたそれは少しかもしれませんイメージを使用する方が効率的です(イメージを送信したサーバーが正常に送信されていることを前提として):

function checkStatus(imgUrl) { 
    return new Promise(function(resolve, reject) { 
     var img = new Image(); 
     img.src = imgUrl; 
     img.onload = resolve; 
     img.onerror = reject; 
    }); 
} 

var imageUrl = 'https://cdn.sstatic.net/Sites/stackoverflow/img/sprites.svg?v=d689de80c4e2'; 
var UPTIME_INTERVAL = 3000; 

setInterval(function() { 
    checkStatus(imageUrl) 
     .then(function(success) { console.log('success') }) 
     .catch(function(err) { console.log('error') }) 
}, UPTIME_INTERVAL); 

編集:非常に小さい画像は、コードが私は推測OKに見えるこのシナリオ

+0

ありがとう!私はこれを試して、それがどうなるか見てみましょう。文字列や単純な可変値ではなく画像を表示することを考えていませんでした。 –

+0

https://github.com/mdn/js-examples/blob/master/promises-test/index.htmlこのリソースが見つかった場合、誰かが新しいPromise関数を調べることを望んでいます。この場合非常に便利です! –

関連する問題