[解決済み] Javascriptからサーバーにpingを打つことは可能ですか?
質問
リモートサーバーがオンラインかどうかを確認する必要がある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
というエラーが発生します。もし誰かが別の解決策を確認できたら、私はそれを受け入れ回答として載せます。
関連
-
[解決済み] テスト
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
JavaScriptの配列共通メソッド解説
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
JavaScriptのStringに関する共通メソッド
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR