1. ホーム
  2. javascript

[解決済み] Javascriptからサーバーにpingを打つことは可能ですか?

2022-04-21 07:37:51

質問

リモートサーバーがオンラインかどうかを確認する必要があるWebアプリを作っています。コマンドラインから実行すると、ページのロードが60秒になります(8つのエントリの場合、それ以上では線形にスケールします)。

私は、ユーザー側でPingを打つという方法を取ることにしました。こうすれば、ページを読み込んで、コンテンツを見ながら「サーバーがオンラインです」というデータを待ってもらうだけでいいんです。

もし、上記の質問に対する答えや、私のページの読み込みを速く保つための解決策を知っている人がいたら、ぜひ教えてほしいです。

解決方法は?

を非常に巧みに使って、これを実現している人を見つけました。 Image オブジェクトを作成します。

そのソースから、これは主な機能です(ソースの他の部分に依存していますが、あなたはアイデアを得ることができます)。

function Pinger_ping(ip, callback) {

  if(!this.inUse) {

    this.inUse = true;
    this.callback = callback
    this.ip = ip;

    var _that = this;

    this.img = new Image();

    this.img.onload = function() {_that.good();};
    this.img.onerror = function() {_that.good();};

    this.start = new Date().getTime();
    this.img.src = "http://" + ip;
    this.timer = setTimeout(function() { _that.bad();}, 1500);

  }
}

これは、私がテストしたすべてのタイプのサーバー(ウェブサーバー、ftpサーバー、ゲームサーバー)で動作します。また、portsでも動作します。もし誰かが失敗するようなケースに遭遇したら、コメントに書き込んでください、そうすれば私の答えを更新します。

更新情報 : 以前のリンクは削除されました。もし誰かが上記を見つけたり実装したりした場合は、コメントいただければ回答に追加します。

アップデート2 : @trante が親切にも jsFiddle を提供してくれました。

http://jsfiddle.net/GSSCD/203/

アップデート3 : Jonathon が実装を含む GitHub リポを作成しました。

https://github.com/jdfreder/pingjs

アップデート4 : この実装はもう信頼性がないように見えます。また、Chrome がすべてサポートしなくなったという報告もあります。 net::ERR_NAME_NOT_RESOLVED というエラーが発生します。もし誰かが別の解決策を確認できたら、私はそれを受け入れ回答として載せます。