Prost क्या है और इसकी आवश्यकता क्यों है?
Prost Rust प्रोग्रामिंग भाषा के लिए एक शक्तिशाली और उच्च-प्रदर्शन वाली लाइब्रेरी है, जो Protocol Buffers (protobuf) के साथ काम करने के लिए डिज़ाइन की गई है। Protocol Buffers Google द्वारा विकसित एक डेटा सीरियलाइज़ेशन तंत्र है, जो JSON या XML की तुलना में अधिक कॉम्पैक्ट और तेज़ है।
Prost कई महत्वपूर्ण समस्याओं का समाधान करता है:
- कोड जनरेशन:
.protoफ़ाइलों से स्वचालित रूप से Rust स्ट्रक्चर बनाता है, जिससे डेवलपर को रूटीन काम से मुक्ति मिलती है। - सीरियलाइज़ेशन और डीसीरियलाइज़ेशन: डेटा को protobuf बाइनरी फॉर्मेट से Rust स्ट्रक्चर में और वापस बदलता है।
- उच्च प्रदर्शन: जीरो-कॉपी (zero-copy) और कुशल मेमोरी प्रबंधन का उपयोग करता है, जो इसे Rust में protobuf के साथ काम करने के लिए सबसे तेज़ समाधानों में से एक बनाता है।
- सुरक्षा: पूरी तरह से Rust में लिखा गया है, जो मेमोरी और थ्रेड सुरक्षा सुनिश्चित करता है।
यह लाइब्रेरी विशेष रूप से माइक्रोसर्विस आर्किटेक्चर, सर्विसेज के बीच डेटा एक्सचेंज सिस्टम, कॉन्फ़िगरेशन स्टोरेज और किसी भी ऐसे परिदृश्य में उपयोगी है जहां कुशल सीरियलाइज़ेशन की आवश्यकता होती है।
इंस्टॉलेशन
Prost को Cargo पैकेज मैनेजर के माध्यम से इंस्टॉल किया जाता है। शुरू करने के लिए, अपने Cargo.toml में निम्नलिखित डिपेंडेंसी जोड़ें:
[dependencies]
prost = "0.12"
prost-build = "0.12"
tonic = "0.11" # वैकल्पिक, gRPC के लिए
bytes = "1.5" # बफ़र्स के साथ काम करने के लिए
[build-dependencies]
prost-build = "0.12"
आपको protobuf कंपाइलर (protoc) भी इंस्टॉल करना होगा। Ubuntu/Debian पर:
sudo apt install protobuf-compiler
macOS पर:
brew install protobuf
Windows पर, आधिकारिक protobuf रिपॉजिटरी से बाइनरी डाउनलोड करें और PATH में जोड़ें।
त्वरित शुरुआत
person.proto फ़ाइल बनाएं:
syntax = "proto3";
message Person {
string name = 1;
int32 age = 2;
repeated string phone_numbers = 3;
}
प्रोजेक्ट की रूट में build.rs बनाएं:
fn main() -> Result<(), Box<dyn std::error::Error>> {
prost_build::compile_protos(&["src/person.proto"], &["src/"])?;
Ok(())
}
अब main.rs में:
use prost::Message;
// जनरेटेड कोड person मॉड्यूल में होगा
pub mod person {
include!(concat!(env!("OUT_DIR"), "/person.rs"));
}
fn main() {
// ऑब्जेक्ट बनाएं
let person = person::Person {
name: "राहुल".to_string(),
age: 30,
phone_numbers: vec!["+91-999-123-45-67".to_string()],
};
// बाइट्स में सीरियलाइज़ करें
let mut buf = Vec::new();
person.encode(&mut buf).unwrap();
println!("सीरियलाइज़ किए गए {} बाइट", buf.len());
// वापस डीसीरियलाइज़ करें
let decoded = person::Person::decode(&buf[..]).unwrap();
println!("नाम: {}, उम्र: {}", decoded.name, decoded.age);
}
मुख्य मेथड्स और फंक्शन्स
1. Message::encode
यह क्या करता है: मैसेज को protobuf बाइनरी फॉर्मेट में सीरियलाइज़ करता है और बफ़र में लिखता है।
पैरामीटर्स:
&self— मैसेज का रेफरेंसbuf: &mut impl BufMut— लिखने के लिए बफ़र (आमतौर परVec<u8>)
उदाहरण:
let mut buf = Vec::new();
my_message.encode(&mut buf).unwrap();
2. Message::decode
यह क्या करता है: बाइट्स को वापस Rust स्ट्रक्चर में डीसीरियलाइज़ करता है।
पैरामीटर्स:
buf: impl Buf— बाइट्स का स्रोत (स्लाइस, Vec, Bytes)
उदाहरण:
let decoded = MyMessage::decode(&buf[..]).unwrap();
3. Message::encod
पुस्तकालय में भी
Swift (iOS/macOS) में ऑब्जेक्ट सीरियलाइज़ेशन: Codable, JSON और PropertyList
Sarama Go: पूर्ण गाइड, उदाहरण और उपयोग विधियाँ
Swift (iOS/macOS) में परीक्षण: फ्रेमवर्क और उपकरण
Go (Golang) में कैशिंग: Redis, in-memory और अन्य समाधान
PHP अनुप्रयोगों की निगरानी: प्रदर्शन ट्रैकिंग के लिए उपकरण और लाइब्रेरीज़