मैं आपको अपने विचार से परिचित कराना चाहता हूं और कैसे "आरओएचसी" को नोडजेएस में बाइंडिंग देना संभव हुआ।
मैं एक वीपीएन लागू करना चाहता था जो वेब-सॉकेट पर चलता हो। इसका फायदा यह होगा कि सेवा HTTPS पर छुपी रहेगी। HTTP3 के साथ यह और भी अधिक अनुकूलित होगा। इसलिए मैंने NodeJS के लिए TunTap2 मॉड्यूल के साथ खेलना शुरू किया, जिसे मुझे पहले पैच करना था।
हमेशा वायरलेस तकनीक से आकर्षित रहने के कारण, किसी समय मुझे "लोरा" और इसके साथ एक प्रोजेक्ट "आईपी2लोरा" मिला।
छवि स्रोत
इस प्रोजेक्ट "आईपी2लोरा" में, 40 बाइट्स बचाने के लिए आईपी पैकेट को छोटा किया गया था, जो स्थानांतरण के लिए बहुत महत्वपूर्ण है; 434 मेगाहर्ट्ज या 868 मेगाहर्ट्ज के रेडियो बैंड के साथ, इतना अधिक स्थानांतरित नहीं किया जा सकता है।
छवि स्रोत
ग्राफ़िक में आप स्पष्ट रूप से देख सकते हैं कि आईपी पैकेट का आकार कैसे घटता है।
दुर्भाग्य से पायथन के लिए केवल एक लिब बाइंडिंग थी।
तो आप स्वयं को बाइंडिंग करते हुए एक नोड लिब क्यों नहीं लिखते!?
परिणाम अब देखा जा सकता है।
https://www.npmjs.com/package/node-rohc
आप परियोजना के लिंक में आरओएचसी कैसे काम करता है इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं या बस इसे खोज सकते हैं। मैं इसे यहां नहीं समझाऊंगा ताकि पोस्ट बहुत लंबी न हो जाए।
मैंने लिनक्स डेबियन/मिंट के अंतर्गत स्थापित किया है। मुझे लगता है कि यह अन्य Linux संस्करणों के समान होना चाहिए।
(वैसे, मुझे ROHC-lib को नए कर्नेल पर पैच भी करना था।)
sudo apt-get install autotools-dev sudo apt-get install automake sudo apt-get install libtool sudo apt-get install libpcap-dev sudo apt-get install -y libcmocka-dev git clone https://github.com/stefanwerfling/rohc.git cd rohc ./autogen.sh --prefix=/usr make all sudo make install
अब हम अपने प्रोजेक्ट में जा सकते हैं और मॉड्यूल इंस्टॉल कर सकते हैं।
cd yourProject npm i node-rohc
अब हमें NodeJS बाइंडिंग बनानी होगी (इसे प्रत्येक CPU आर्किटेक्चर के लिए स्वयं संकलित करना होगा)।
cd yourProject/node_modules/node-rohc npm run build --loglevel verbose
इंस्टॉलेशन अब पूरा हो गया है।
अब मान लें कि हमें एक आईपी पैकेट मिलता है जिसे हम बाइट्स को बचाने के लिए निम्नलिखित पैकेट में संपीड़ित करना चाहते हैं।
const ipU8Packet = new Uint8Array(ipPacketBufferWithContent); console.log(ipU8Packet);
Uint8Array(52) [ 69, 0, 0, 52, 0, 0, 0, 0, 64, 6, 249, 112, 192, 168, 0, 1, 192, 168, 0, 2, 72, 101, 108, 108, 111, 44, 32, 116, 104, 105, 115, 32, 105, 115, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 112, 97, 121, 108, 111, 97, 100, 33 ]
मॉड्यूल अब आयात किया गया है और यूनिट8एरे जिसमें आईपी पैकेट संपीड़न के लिए Rhoc ऑब्जेक्ट को दिया गया है।
import {Rohc} from 'node-rohc'; const r = new Rohc([ RohcProfiles.ROHC_PROFILE_UNCOMPRESSED, RohcProfiles.ROHC_PROFILE_IP, RohcProfiles.ROHC_PROFILE_TCP, RohcProfiles.ROHC_PROFILE_UDP, RohcProfiles.ROHC_PROFILE_ESP, RohcProfiles.ROHC_PROFILE_RTP ]); try { const compress = r.compress(ipU8Packet); console.log(compress); } catch (e) { console.error(e); }
Uint8Array(53) [ 253, 4, 69, 64, 6, 192, 168, 0, 1, 192, 168, 0, 2, 0, 64, 0, 0, 32, 0, 251, 103, 72, 101, 108, 108, 111, 44, 32, 116, 104, 105, 115, 32, 105, 115, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 112, 97, 121, 108, 111, 97, 100, 33 ]
रोहक ऑब्जेक्ट के कंस्ट्रक्टर में हम उन प्रोफाइल को निर्दिष्ट करते हैं जिनका उपयोग किसी ऐरे में संपीड़न के लिए किया जाना चाहिए।
फिर संपीड़न आता है। आउटपुट में हम नया पैकेज देखते हैं। लेकिन यह छोटा क्यों नहीं है?
पहले पैकेट में अभी भी पोर्ट/आईपी-एड्रेस आदि के बारे में जानकारी है। केवल निम्नलिखित पैकेट काफी छोटे हो गए हैं।
रोहक पैकेट को वापस सामान्य आईपी पैकेट में बदलने के लिए हम डीकंप्रेस का उपयोग करते हैं।
try { const decompress = r.decompress(compress); console.log(decompress); } catch (e) { console.error(e); }
Uint8Array(52) [ 69, 0, 0, 52, 0, 0, 0, 0, 64, 6, 249, 112, 192, 168, 0, 1, 192, 168, 0, 2, 72, 101, 108, 108, 111, 44, 32, 116, 104, 105, 115, 32, 105, 115, 32, 116, 104, 101, 32, 100, 97, 116, 97, 32, 112, 97, 121, 108, 111, 97, 100, 33 ]
जो महत्वपूर्ण है वह शुरुआत है, पहले पैकेट को संपीड़ित किया जाता है और गंतव्य तक प्रेषित किया जाता है और गंतव्य ने पैकेट को विघटित कर दिया है, उदाहरण को बनाए रखा जाना चाहिए। ताकि कनेक्शन आईडी ज्ञात रहे। इसका मतलब है कि प्रोग्राम को ऑब्जेक्ट इंस्टेंस को चालू रखना होगा। यदि दो पृष्ठों में से एक (संपीड़न वाला स्रोत या विसंपीड़न वाला गंतव्य) बंद कर दिया गया है, तो दोनों पृष्ठों को पुनः आरंभ करना होगा।
उपयोगी जानकारी के साथ अतिरिक्त फ़ंक्शन:
import {Rohc, RohcStatus} from 'node-rohc'; if (r.getLastStatus() === RohcStatus.ROHC_OK) { console.log('All OK'); }
संपीड़न या विसंपीड़न के दौरान, स्थिति याद रहती है; क्या हुआ इसके बारे में अधिक विस्तृत जानकारी प्राप्त करने के लिए इसके तुरंत बाद फिर से पूछताछ की जा सकती है।
console.log(r.compressLastPacketInfo()); console.log(r.decompressLastPacketInfo());
{ version_major: 0, version_minor: 0, context_id: 0, is_context_init: true, context_mode: 1, context_state: 1, context_used: true, profile_id: 4, packet_type: 0, total_last_uncomp_size: 52, header_last_uncomp_size: 20, total_last_comp_size: 53, header_last_comp_size: 21 } { version_major: 0, version_minor: 0, context_mode: 2, context_state: 3, profile_id: 4, nr_lost_packets: 0, nr_misordered_packets: 0, is_duplicated: false, corrected_crc_failures: 11745388377929038000, corrected_sn_wraparounds: 14987979559889062000, corrected_wrong_sn_updates: 12105675798372346000, packet_type: 449595, total_last_comp_size: 18407961667527770000, header_last_comp_size: 1940628627783807, total_last_uncomp_size: 18407961667125117000, header_last_uncomp_size: 217316637802623 }
अंतिम संपीड़न या विसंपीड़न के बारे में जानकारी।
console.log(r.compressGeneralInfo()); console.log(r.decompressGeneralInfo());
{ version_major: 0, version_minor: 0, contexts_nr: 1, packets_nr: 1, uncomp_bytes_nr: 52, comp_bytes_nr: 53 } { version_major: 0, version_minor: 0, contexts_nr: 1, packets_nr: 1, comp_bytes_nr: 53, uncomp_bytes_nr: 52, corrected_crc_failures: 0, corrected_sn_wraparounds: 8518447232180027000, corrected_wrong_sn_updates: 4295000063 }
संपीड़न और विसंपीड़न के बारे में सामान्य जानकारी।
मुझे आशा है कि आपको मेरी छोटी पोस्ट पसंद आई होगी। मैं हमेशा सुधार के लिए तैयार हूं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3