2012-01-22 16 views
10

उदाहरण के लिए गेम काउंटर स्ट्राइक की तरह, मैं जावास्क्रिप्ट में गेम-जैसी पिंग बनाना चाहता हूं। मैं सर्वर (MySQL) पर एक AJAX कॉल कर रहा हूं और जो समय लिया गया है उसकी गणना करना चाहता हूं, लेकिन मैं या तो गलत गणना कर रहा हूं या पिंग करने का गलत विचार कर रहा हूं। यहां मेरे पास अब तक का कोड है:जावास्क्रिप्ट या jQuery में पिंग कैसे करें?

var time_stamp = new Date; 

$.ajax({ type: "POST", 
    url: "server.php", 
    data: {....}, 
    success: function(output){ 

     ping = new Date - time_stamp; 

    } 
}); // btw, this code works fine now for ping 

समस्या यह है कि कभी-कभी मुझे 0ms या 3ms मिलते हैं। यह ठीक है? server.php पर जाने के लिए यह बहुत तेज़ लगता है, डेटाबेस से कनेक्ट करें, कुछ पंक्तियों का चयन करें, और कुछ डेटा वापस करें। हां, यह लोकलहोस्ट पर है, इसलिए यह तेज़ होना चाहिए, लेकिन क्या यह तेजी से होना चाहिए? क्या मुझे इसकी गणना एफपीएस पर की जानी चाहिए, या सिर्फ प्रत्येक कॉल server.php पर होनी चाहिए?

+0

मुझे लगता है कि यह ठीक है ले लिया। 'Server.php' से कुछ आउटपुट प्राप्त करने का प्रयास करें, अगर यह ठीक प्रतिक्रिया देता है, तो यह ठीक है :) यदि आप क्रोम या फ़ायरबग का उपयोग करते हैं, तो AJAX अनुरोध समय पर एक नज़र डालें। –

+1

सुनिश्चित करें कि वेब सर्वर कैशिंग को रोकने के लिए server.php पर शीर्षलेख भेज रहा है। –

+0

सहायता के लिए धन्यवाद। मैंने जांच की और क्रोम मुझे 1 एमएमएस कम कर रहा है तो मेरी गणना ठीक है। – Kivylius

उत्तर

7

कम प्रतिक्रिया समय है, क्योंकि डिफ़ॉल्ट रूप से cache संपत्ति सही पर सेट है, false के लिए सेट इतना है कि हर बार यह सर्वर कैश

var ping = new Date; 

$.ajax({ type: "POST", 
    url: "server.php", 
    data: {....}, 
    cache:false, 
    success: function(output){ 

     ping = new Date - ping; 

    } 
}); 
2

नहीं को जाता है आप की गणना करने के लिए सक्षम नहीं होंगे क्लाइंट साइड पर सटीक विलंबता (जावा, फ्लैश या वेबसाइकिलों की गणना नहीं), आपको सर्वर की गणना करने और प्रतिक्रिया में मूल्य वापस करने की आवश्यकता है। , पी

कनेक्शन राज्य में जल्द से जल्द समय मुझे 300msstackoverflow.com के लिए हो जाता है, जबकि वास्तविक संख्या 100ms के करीब है: स्थानीय होस्ट के लिए 0ms के अलावा और कुछ हो रही है इस बात का पर्याप्त सबूत होना चाहिए।

var a = new XMLHttpRequest(); 

a.onreadystatechange = function() { 

    if (a.readyState === a.HEADERS_RECEIVED) { 
     a.abort(); 
     console.log(new Date - abc); 
    } 
}; 

var abc = new Date; 

a.open("GET", "/"); 
a.send(null); 

पूर्ण प्रतिक्रिया (a.DONE) के लिए प्रतीक्षा कर 949ms

संबंधित मुद्दे