2008-09-16 9 views
19

के माध्यम से HTTP अनुरोध का प्रतिक्रिया समय कैसे मिल सकता है, मैं एक सर्वर से जुड़े जावा सॉकेट का उपयोग कर रहा हूं। यदि मैं एक हेडर http अनुरोध भेजता हूं, तो मैं सर्वर से प्रतिक्रिया समय को कैसे माप सकता हूं? क्या मुझे एक प्रदान किए गए जावा टाइमर का उपयोग करना चाहिए, या क्या कोई आसान तरीका है?मुझे सॉकेट

मुझे एक छोटा सा जवाब मिल रहा है, मैं अन्य प्रोटोकॉल आदि का उपयोग नहीं करना चाहता हूं। जाहिर है, मैं न तो एक ऐसा समाधान करना चाहता हूं जो मेरे एप्लिकेशन को एक विशिष्ट ओएस से जोड़ता है। कृपया लोगों को, इन-कोड समाधान केवल।

+0

डीबगिंग उद्देश्यों के लिए, या आपके प्रोग्राम द्वारा उपयोग के लिए? – owenmarshall

उत्तर

12

मैं कहूंगा यह इस बात पर निर्भर करता है कि आप किस सटीक अंतराल को मापने की कोशिश कर रहे हैं, उस अनुरोध के अंतिम बाइट से समय की मात्रा जो आप प्रतिक्रिया के पहले बाइट तक भेजते हैं आपको प्राप्त हुआ? या जब तक पूरी प्रतिक्रिया प्राप्त नहीं होती है? या आप केवल सर्वर-साइड टाइम को मापने की कोशिश कर रहे हैं?

यदि आप केवल सर्वर साइड प्रोसेसिंग समय को मापने की कोशिश कर रहे हैं, तो आपको पहुंचने के अनुरोध के लिए नेटवर्क ट्रांजिट में बिताए गए समय और वापसी की प्रतिक्रिया के लिए समय लगाना मुश्किल होगा। अन्यथा, चूंकि आप सॉकेट के माध्यम से अनुरोध का प्रबंधन कर रहे हैं, इसलिए आप सिस्टम घड़ी की जांच करके और अंतर की गणना करके किसी भी दो क्षणों के बीच विलुप्त समय को माप सकते हैं। उदाहरण के लिए:

public void sendHttpRequest(byte[] requestData, Socket connection) { 
    long startTime = System.currentTimeMillis(); 
    writeYourRequestData(connection.getOutputStream(), requestData); 
    byte[] responseData = readYourResponseData(connection.getInputStream()); 
    long elapsedTime = System.currentTimeMillis() - startTime; 
    System.out.println("Total elapsed http request/response time in milliseconds: " + elapsedTime); 
} 

इस कोड से लेकर आप प्रतिक्रिया प्राप्त करना समाप्त करने के लिए आपके अनुरोध बाहर लिखाई शुरू समय को मापने होता है, और मुद्रित परिणाम (यह मानते हुए आप अपने विशिष्ट पढ़ें/लिखें तरीकों को लागू किया है)।

+1

मैं अपनी वेब सेवा में यह फ़ंक्शन कहां जोड़ सकता हूं ?? –

12

आप कमांड लाइन पर समय और कर्ल और समय का उपयोग कर सकते हैं। कर्ल के लिए II तर्क केवल हेडर का अनुरोध करने के लिए निर्देश देता है।

time curl -I 'http://server:3000' 
7

कुछ इस तरह चाल

 
import java.io.IOException; 

import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.HttpMethod; 
import org.apache.commons.httpclient.URIException; 
import org.apache.commons.httpclient.methods.HeadMethod; 
import org.apache.commons.lang.time.StopWatch; 
//import org.apache.commons.lang3.time.StopWatch 

public class Main { 

    public static void main(String[] args) throws URIException { 
     StopWatch watch = new StopWatch(); 
     HttpClient client = new HttpClient(); 
     HttpMethod method = new HeadMethod("http://stackoverflow.com/"); 

     try { 
      watch.start(); 
      client.executeMethod(method); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      watch.stop(); 
     } 

     System.out.println(String.format("%s %s %d: %s", method.getName(), method.getURI(), method.getStatusCode(), watch.toString())); 

    } 
} 
 
HEAD http://stackoverflow.com/ 200: 0:00:00.404 
2

शायद मैं कुछ याद कर रहा हूँ कर सकते हैं, लेकिन क्यों तुम सिर्फ प्रयोग नहीं करते:

// open your connection 
long start = System.currentTimeMillis(); 
// send request, wait for response (the simple socket calls are all blocking) 
long end = System.currentTimeMillis(); 
System.out.println("Round trip response time = " + (end-start) + " millis"); 
0

सॉकेट में कॉल को अवरुद्ध करने और प्रतिक्रिया समय को मापने के लिए एओपी का उपयोग करें।

19

curl -s -w "%{time_total}\n" -o /dev/null http://server:3000