Rust में WebSocket: tokio-tungstenite और tungstenite लाइब्रेरीज़

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

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

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

Rust के लिए WebSocket लाइब्रेरीज़: tungstenite और tokio-tungstenite

\n\n

WebSocket एक प्रोटोकॉल है जो एक TCP कनेक्शन पर क्लाइंट और सर्वर के बीच पूर्ण-द्वैध संचार प्रदान करता है। Rust इकोसिस्टम में, WebSocket के साथ काम करने के लिए सबसे लोकप्रिय लाइब्रेरीज़ tungstenite (सिंक्रोनस) और tokio-tungstenite (Tokio पर आधारित एसिंक्रोनस) हैं। दोनों लाइब्रेरीज़ WebSocket सर्वर और क्लाइंट बनाने के लिए उच्च-स्तरीय API प्रदान करती हैं, मानक एक्सटेंशन और TLS के माध्यम से सुरक्षा का समर्थन करती हैं।

\n\n

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

\n
    \n
  • tungstenite: WebSocket (RFC 6455) का सिंक्रोनस कार्यान्वयन, ब्लॉकिंग ऑपरेशन का समर्थन करता है, सरल स्क्रिप्ट और एम्बेडिंग के लिए उपयुक्त है।
  • \n
  • tokio-tungstenite: tungstenite के ऊपर एसिंक्रोनस रैपर, Tokio रनटाइम के साथ एकीकृत, एक साथ हजारों कनेक्शन संभालने की अनुमति देता है।
  • \n
  • फ्रेम, संदेश, पिंग/पोंग, कनेक्शन बंद करने का समर्थन।
  • \n
  • TLS के साथ काम करना (rustls या native-tls के माध्यम से)।
  • \n
  • WebSocket एक्सटेंशन का समर्थन (जैसे permessage-deflate संपीड़न)।
  • \n
  • सरल सेटअप और न्यूनतम निर्भरताएं।
  • \n
\n\n

स्थापना

\n

Cargo.toml में लाइब्रेरी जोड़ें:

\n
[dependencies]\ntokio-tungstenite = "0.21"       # एसिंक्रोनस विकल्प\ntungstenite = "0.21"             # सिंक्रोनस विकल्प\ntokio = { version = "1", features = ["full"] }  # tokio-tungstenite के लिए\n
\n\n

एसिंक्रोनस WebSocket सर्वर का उदाहरण (tokio-tungstenite)

\n

एक सरल इको सर्वर बनाएं जो टेक्स्ट संदेश प्राप्त करता है और उन्हें वापस भेजता है:

\n
use tokio::net::TcpListener;\nuse tokio_tungstenite::accept_async;\nuse tokio_tungstenite::tungstenite::Message;\nuse futures_util::{SinkExt, StreamExt};\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn std::error::Error>> {\n    let listener = TcpListener::bind("127.0.0.1:9001").await?;\n    println!("WebSocket सर्वर ws://127.0.0.1:9001 पर शुरू हुआ");\n\n    while let Ok((stream, peer)) = listener.accept().await {\n        tokio::spawn(handle_connection(stream, peer));\n    }\n    Ok(())\n}\n\nasync fn handle_connection(stream: tokio::net::TcpStream, peer: std::net::SocketAddr) {\n    let ws_stream = match accept_async(stream).await {\n        Ok(ws) => ws,\n        Err(e) => {\n            eprintln!("कनेक्ट करने में त्रुटि {}: {}", peer, e);\n            return;\n        }\n    };\n\n    let (mut write, mut read) = ws_stream.split();\n    println!("नया कनेक्शन: {}", peer);\n\n    while let Some(msg) = read.next().await {\n        match msg {\n            Ok(Message::Text(text)) => {\n                println!("{} से प्राप्त: {}", peer, text);\n                if let Err(e) = write.send(Message::Text(text.into())).await {\n                    eprintln!("भेजने में त्रुटि: {}", e);\n                    break;\n                }\n            }\n            Ok(Message::Close(_)) => {\n                println!("क्लाइंट {} डिस्कनेक्ट हुआ", peer);\n                break;\n            }\n            Err(e) => {\n                eprintln!("त्रुटि: {}", e);\n                break;\n            }\n            _ => {} // बाइनरी और नियंत्रण संदेशों को अनदेखा करें\n        }\n    }\n}\n
\n\n

सिंक्रोनस WebSocket क्लाइंट का उदाहरण (tungstenite)

\n

एक सरल क्लाइंट जो सर्वर से कनेक्ट होता है और संदेश भेजता है:

\n
use tungstenite::{connect, Message};\nuse url::Url;\n\nfn main() -> Result<(), Box<dyn std::error::Error>> {\n    let url = Url::parse("ws://echo.websocket.org")?;\n    let (mut socket, response) = connect(url)?;\n\n    println!("सर्वर से कनेक्ट हुआ");\n    println!("HTTP स्थिति: {}", response.status());\n\n    socket.send(Message::Text("नमस्ते, WebSocket!".into()))?;\n    println!("संदेश भेजा गया");\n\n    let msg = socket.read()?;\n    if let Message::T                    

अनुशंसाएँ