2010-11-08 15 views
5

मेरे जावा ऐप में, मैं कैसे पता लगा सकता हूं कि इंटरनेट कनेक्शन की गति कितनी तेजी से है? उदाहरण के लिए, मैं में घर जैसा & टी फास्ट डीएसएल उपयोग करते हैं, मुझे आश्चर्य है कि अगर वहाँ एक तरह से मैं एक विधि है जो निम्न करता है लिख सकते हैं:जावा के साथ इंटरनेट कनेक्शन की गति का पता लगाने के लिए कैसे?

int getInternetConnectionSpeed() 
{ 
    ... 
} 

कौन सा 2800kbps तरह केबीपीएस में एक नंबर, कुछ [2.8 वापस आ जाएगी एम]

संपादित करें: कारण मैं पूछ रहा हूं, मेरे ऐप में है, मैं उपयोगकर्ताओं की इंटरनेट कनेक्शन की गति के आधार पर कई इंटरनेट स्ट्रीम खोल सकता हूं, मैं चाहता हूं कि यह निर्धारित करने के लिए कितनी धाराएं खुलती हैं अप्प।

+0

मुझे लगता है कि इसके लिए वास्तव में काम करने के लिए आपको अपने परीक्षण के दूसरे छोर पर एक सर्वर होना होगा जो आपके एटी एंड टी कनेक्शन की अधिकतम सीमा से अधिक गति को नियंत्रित कर सकता है ... – FrustratedWithFormsDesigner

+0

भले ही आप "आधिकारिक" "उपयोगकर्ता के इंटर्नसेट के लिए कनेक्शन की गति, यह संख्या अधिकांश वास्तविक दुनिया परिदृश्यों के लिए बेहद गलत होगी। शायद आपको पुनर्विचार करना चाहिए कि आपको इस जानकारी की आवश्यकता क्यों है और ऐसा करने का एक अलग तरीका ढूंढें जो आप * वास्तव में * करने की कोशिश कर रहे हैं। – Randolpho

+0

क्या आपकी "स्ट्रीम" बैंडविड्थ सीमित है, या आप जितनी जल्दी संभव हो सके 10 धाराओं को डाउनलोड करने के साथ 1 स्ट्रीम डॉउलोडिंग के साथ समाप्त हो जाएंगे (जिस स्थिति में आप मुश्किल से कुछ भी प्राप्त करते हैं) – nos

उत्तर

2

मुझे लगता है कि आप गलत तरीके से समस्या के बारे में सोच सकते हैं। एक कनेक्शन की गति का स्नैपशॉट लेना उस समय तत्काल उस समय अपने थ्रूपुट का संकेत है। जब आप अपने बैंडविड्थ को बेकार करते हैं और फिर आपके मापा मान बेकार होते हैं तो वे आसानी से एक और एप्लीकेशन चला सकते हैं।

इसके बजाय, मुझे लगता है कि आपको थ्रेड्स को लगातार जोड़ना या निकालना चाहिए या नहीं, यह उनके थ्रूपुट को बढ़ाता या घटाता है या नहीं। मैं इस तरह कुछ सुझाव दूंगा (केवल छद्म कोड):

while(true) { 
    double speedBeforeAdding = getCurrentSpeed(); 
    addThread(); 
    // Wait for speed to stabilise 
    sleep(20 seconds); 
    double speedAfterAdding = getCurrentSpeed(); 
    if(speedAfterAdding < speedBeforeAdding) { 
    // Undo the addition of the new thread 
    removeThread(); 
    // Wait for speed to stabilise 
    sleep(20 seconds); 

    if(getNumberOfThreads() > 1) { 
     double speedBeforeRemoving = getCurrentSpeed(); 
     // Remove a thread because maybe there's too many 
     removeThread(); 
     // Wait for speed to stabilise 
     sleep(20 seconds); 
     double speedAfterRemoving = getCurrentSpeed(); 
     if(speedAfterRemoving < speedBeforeRemoving) { 
     // Add the thread back 
     addThread(); 
     // Wait for speed to stabilise 
     sleep(20 seconds); 
     } 
    } 
    } 
} 

आप सोने के समय के साथ फिट बैठ सकते हैं। मुझे लगता है कि getCurrentSpeed()के सभी डाउनलोड थ्रेड का थ्रूपुट देता है और आप अपने एप्लिकेशन के निष्पादन के दौरान गतिशील रूप से खुले और बंद करने में सक्षम हैं।

+2

धन्यवाद, यह एक बिल्ली को त्वचा के लिए एक चालाक तरीका है! – Frank

+0

शायद आप धागे को मैंग करने के लिए थ्रेड पूल का उपयोग करना चाहते हैं। – Holly

1

समय ज्ञात (और पर्याप्त रूप से बड़े) आकार की फ़ाइल डाउनलोड करने में कितना समय लगता है।

यदि यह आपको 10 एमबी डाउनलोड करने के लिए 60s लेता है, तो आपके पास (10 * 1024 * 8/60) केबीपीएस या 1365 केबीपीएस कनेक्शन है।

+2

हां, यह केवल उस सर्वर से कनेक्शन की गति निर्धारित करने के लिए काम करेगा जिससे फ़ाइल डाउनलोड की गई थी, न कि सामान्य पोस्टर स्तर की स्थानांतरण गति जो मूल पोस्टर की इच्छा होती है। – Randolpho

+0

... हाँ, रैंडोल्फो ने क्या कहा। – FrustratedWithFormsDesigner

+1

@Randolpho: आप इसे उस सर्वर के लिए करेंगे जो आप संचार करेंगे। अन्य सभी लिंक गति अप्रासंगिक हैं। –

1

लेकिन वहाँ जहाँ आप कनेक्ट करना चाहते हैं के आधार पर कई गति कर रहे हैं:

  • 127.0.0.1?
  • आपका स्थानीय सबनेट?
  • आपका इंटरनेट?

चूंकि आपका जेवीएम स्थानीय पीसी का उपयोग करता है जो स्थानीय नेट का उपयोग करता है, तो डीएसएल की गति स्वचालित रूप से प्राप्त करने का कोई तरीका नहीं है।

ओह, और कृपया ध्यान दें, आप long distance सर्फिंग भी कर सकते हैं!

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