Tôi đã tìm thấy ai đó thực hiện điều này với cách sử dụng rất thông minh của Imageđối tượng bản địa .
Từ nguồn của họ, đây là chức năng chính (nó có sự phụ thuộc vào các phần khác của nguồn nhưng bạn có ý tưởng).
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);
}
}
Điều này hoạt động trên tất cả các loại máy chủ mà tôi đã thử nghiệm (máy chủ web, máy chủ ftp và máy chủ trò chơi). Nó cũng hoạt động với các cổng. Nếu bất cứ ai gặp phải trường hợp sử dụng không thành công, xin vui lòng gửi trong các ý kiến và tôi sẽ cập nhật câu trả lời của tôi.
Cập nhật : Liên kết trước đã được gỡ bỏ. Nếu bất cứ ai tìm thấy hoặc thực hiện các điều trên, xin vui lòng bình luận và tôi sẽ thêm nó vào câu trả lời.
Cập nhật 2 : @trante đã đủ tốt để cung cấp jsFiddle.
http://jsfiddle.net/GSSCD/203/
Cập nhật 3 : @Jonathon đã tạo một repo GitHub với việc thực hiện.
https://github.com/jdfreder/pingjs
Cập nhật 4 : Có vẻ như việc triển khai này không còn đáng tin cậy nữa. Mọi người cũng báo cáo rằng Chrome không còn hỗ trợ tất cả, net::ERR_NAME_NOT_RESOLVEDgây ra lỗi. Nếu ai đó có thể xác minh một giải pháp thay thế, tôi sẽ đặt đó là câu trả lời được chấp nhận.
"/?cachebreaker="+new Date().getTime();phần cuối của img src nếu cần.