2010-08-20 7 views
5

क्या किसी को सॉकेट के बैंडविड्थ उपयोग की गणना करने के बारे में कोई सुझाव है?सॉकेट पर भेजे गए/प्राप्त डेटा की बैंडविड्थ गति की गणना करना?

उदाहरण के लिए, जैसा कि मैं सर्वर से सॉकेट पर डेटा भेजता हूं, मैं उससे जुड़ा हूं, मैं जो Kb/भेजा जा रहा हूं उसे दिखाना चाहता हूं।

Google खोज ने कुछ भी उपयोगी नहीं बताया। शायद मैं गलत शब्द खोज रहा हूँ।

+0

यह लेख आपको कुछ विचार दे सकता है: http://www.roseindia.net/javatutorials/counting_bytes_on_sockets.shtml – darri

उत्तर

5

सबसे अच्छा आप शायद करने में सक्षम हो जा रहे हैं आसानी से कर रिकॉर्ड करने के लिए जब आप लेखन शुरू और फिर बाइट्स आप सफलतापूर्वक Socket.getOutputStream.write() विधि के लिए भेज दिया है गिनती है। थोड़ी सी मात्रा के लिए, यह बहुत गलत होगा क्योंकि यह सिर्फ ओएस के ट्रांसमिशन बफर को भर रहा है जो शुरू में बाइट्स को वास्तव में भेजता है जितना तेज़ी से भेजता है।

यह अनिवार्य रूप से डेटा की काफी बड़ी मात्रा में सही दर के लिए अमूर्त होना चाहिए।

+0

यह सिद्धांत में काम करेगा, लेकिन यह वर्तमान में स्थानांतरण गति का एक बहुत सटीक प्रतिनिधित्व प्रदान नहीं करेगा पल। उदाहरण के लिए: यदि मैं 5 मिनट के लिए लॉगिंग कर रहा था ... पहले 2.5 मिनट कुछ भी नहीं कर रहे थे, और पिछले 2.5 मिनट 100kb/s भेज रहे थे। 5 मिनट के अंत में यह मुझे बताएगा कि गति 50kb/s औसत थी। मैं ट्रांसमिटिंग शुरू करने के बाद से औसत गति की तलाश नहीं कर रहा हूं। मैं वर्तमान गति की तलाश में हूं। शायद पिछले 5 सेकंड का औसत काम करेगा, लेकिन मुझे ऐसा कुछ रिकॉर्ड करने के बारे में कोई जानकारी नहीं है। –

+1

इसे एक मूविंग औसत कहा जाता है: http://en.wikipedia.org/wiki/Moving_average। गणना करने के लिए यह बहुत आसान है हालांकि विभिन्न विधियां हैं। किसी भी क्षण में बैंडविड्थ की गणना करने की वास्तव में ऐसी कोई चीज़ नहीं है; चूंकि डेटा अलग है, इसलिए आपको औसत होना चाहिए। एक अत्यंत सरल विधि 'औसत = (औसत + new_measurement_average)/2.0' होगी। –

+2

नोट: अमरूद [गिनतीऑटपुटस्ट्रीम] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/CountingOutputStream.html) किसी अन्य स्ट्रीम के साथ आउटपुट स्ट्रीम को लपेटना बहुत आसान बनाता है जो लिखित बाइट्स की संख्या की गणना करता है। –

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