Rust की WebSocket लाइब्रेरीज़: रियल-टाइम के लिए Tokio-tungstenite और async-tungstenite

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust की WebSocket लाइब्रेरीज़: Tokio-tungstenite और async-tungstenite



आधुनिक वेब डेवलपमेंट में, WebSocket प्रोटोकॉल रियल-टाइम एप्लिकेशन बनाने के लिए मानक बन गया है: चैट, ऑनलाइन गेम, फाइनेंशियल टिकर और नोटिफिकेशन सिस्टम। Rust का इकोसिस्टम WebSocket के साथ काम करने के लिए शक्तिशाली और सुरक्षित टूल प्रदान करता है, जिनमें tokio-tungstenite और async-tungstenite प्रमुख हैं। ये लाइब्रेरीज़ लोकप्रिय एसिंक्रोनस रनटाइम Tokio और उच्च-प्रदर्शन WebSocket स्टैक tungstenite पर आधारित हैं।



Tokio-tungstenite और async-tungstenite क्या हैं?



Tokio-tungstenite Rust के लिए एक एसिंक्रोनस WebSocket लाइब्रेरी है, जो Tokio रनटाइम के साथ एकीकृत है। यह WebSocket सर्वर और क्लाइंट बनाने के लिए सुविधाजनक एब्स्ट्रैक्शन प्रदान करती है, जो Tokio के मानक प्रकारों (TcpListener, TcpStream) का उपयोग करती है।



Async-tungstenite एक अधिक सामान्य संस्करण है, जो AsyncRead और AsyncWrite ट्रेट्स के माध्यम से किसी भी एसिंक्रोनस रनटाइम (Tokio, async-std, smol) के साथ काम करता है। दोनों लाइब्रेरीज़ RFC 6455 का पूर्ण समर्थन प्रदान करती हैं, जिसमें मैसेज फ्रैग्मेंटेशन, ping/pong और मास्किंग शामिल हैं।



मुख्य विशेषताएं

  • एसिंक्रोनस — async/await का उपयोग करके नॉन-ब्लॉकिंग ऑपरेशन
  • उच्च प्रदर्शन — zero-copy पार्सिंग के कारण न्यूनतम ओवरहेड
  • टाइप सेफ्टी — संदेश सख्ती से टाइप की गई संरचनाओं के रूप में प्रस्तुत किए जाते हैं
  • लचीलापन — सर्वर और क्लाइंट दोनों पक्षों का समर्थन
  • SSL/TLS — rustls या native-tls के माध्यम से सुरक्षित कनेक्शन का अंतर्निहित समर्थन
  • स्वचालित कनेक्शन प्रबंधन — डिस्कनेक्ट और रीकनेक्ट की हैंडलिंग


स्थापना

Cargo.toml में जोड़ें:

[dependencies]tokio = { version = "1", features = ["full"] }tokio-tungstenite = "0.21"futures-util = "0.3"


उदाहरण: WebSocket सर्वर

एक सरल echo-सर्वर बनाते हैं जो प्राप्त संदेश को वापस भेजता है:

use tokio::net::TcpListener;use tokio_tungstenite::accept_async;use futures_util::{SinkExt, StreamExt};use std::error::Error;

#[tokio::main]async fn main() -> Result<(), Box> { let listener = TcpListener::bind("127.0.0.1:8080").await?; println!("WebSocket सर्वर ws://127.0.0.1:8080 पर शुरू हुआ");

while let Ok((stream, addr)) = listener.accept().await { println!("नया कनेक्शन: {}", addr); tokio::spawn(handle_connection(stream)); } Ok(())}

async fn handle_connection(stream: tokio::net::TcpStream) { let ws_stream = accept_async(stream).await.expect("हैंडशेक त्रुटि"); let (mut write, mut read) = ws_stream.split();

while let Some(Ok(msg)) = read.next().await { if msg.is_text() || msg.is_binary() { // संदेश वापस भेजें if let Err(e) = write.send(msg).await { eprintln!("भेजने में त्रुटि: {}", e); break; } } } println!("कनेक्शन बंद हुआ");}


उदाहरण: WebSocket क्लाइंट

सर्वर से कनेक्ट करें और अभिवादन भेजें:

use tokio_tungstenite::connect_async;use futures_util::{SinkExt, StreamExt};use url::Url;

#[tokio::main]async fn main() -> Result<(), Box> { let url = Url::parse("ws://127.0.0.1:8080")?; let (ws_stream, _) = connect_async(url).await?; println!("सर्वर से कनेक्ट हुआ");

let (mut write, mut read) = ws_stream.split();

// संदेश भेजें write.send("नमस्ते, दुनिया!".into()).await?; println!("भेजा गया: नमस्ते, दुनिया!");

// उत्तर पढ़ें if let S

अनुशंसाएँ