WebSocket की खोज

Home PDF

यह ब्लॉग पोस्ट ChatGPT-4o की सहायता से तैयार किया गया है।


परिचय

नमस्ते, मैं ली झीवेई हूँ। CodeReview प्लेटफॉर्म के संस्थापक और CTO के रूप में, और पूर्व LeanCloud इंजीनियर के रूप में, मेरे पास WebSocket पर व्यापक अनुभव है, खासकर IM SDK के विकास प्रक्रिया में।

WebSocket का महत्व

WebSocket एक प्रोटोकॉल है जो एकल TCP कनेक्शन पर पूर्ण डुप्लेक्स संचार चैनल प्रदान करता है। यह आधुनिक एप्लिकेशन में व्यापक रूप से उपयोग किया जाता है जहां वास्तविक समय में इंटरैक्शन की आवश्यकता होती है, जैसे कि तात्कालिक संदेश, वास्तविक समय टिप्पणियाँ, मल्टीप्लेयर गेम्स, सहयोगी संपादन और वास्तविक समय स्टॉक मूल्य।

WebSocket का आधुनिक उपयोग

WebSocket का उपयोग निम्नलिखित क्षेत्रों में व्यापक रूप से किया जाता है:

WebSocket का विकास

पोलिंग (Polling): क्लाइंट सर्वर से अपडेट प्राप्त करने के लिए बार-बार अनुरोध करता है। लॉन्ग पोलिंग (Long Polling): सर्वर अनुरोध को तब तक खुला रखता है जब तक नई जानकारी उपलब्ध न हो। HTTP द्विदिश कनेक्शन (HTTP Bidirectional Connection): भेजने और प्राप्त करने के लिए कई कनेक्शन की आवश्यकता होती है, और प्रत्येक अनुरोध में HTTP हेडर शामिल होता है। एकल TCP कनेक्शन (WebSocket): HTTP द्विदिश कनेक्शन की सीमाओं को दूर करता है, जिससे उच्च वास्तविक समय क्षमता और कम विलंबता प्रदान की जाती है।

iOS पर WebSocket को लागू करना

WebSocket एक प्रोटोकॉल है जो क्लाइंट और सर्वर के बीच द्वि-दिशात्मक संचार को सक्षम बनाता है। iOS ऐप्स में WebSocket का उपयोग करने के लिए, आप URLSessionWebSocketTask का उपयोग कर सकते हैं, जो iOS 13 और बाद के संस्करणों में उपलब्ध है।

1. WebSocket कनेक्शन स्थापित करना

सबसे पहले, आपको WebSocket कनेक्शन स्थापित करने की आवश्यकता है। यहां एक उदाहरण दिया गया है:

import Foundation

let url = URL(string: "wss://your.websocket.server")!
let webSocketTask = URLSession.shared.webSocketTask(with: url)
webSocketTask.resume()

2. संदेश भेजना और प्राप्त करना

WebSocket कनेक्शन स्थापित होने के बाद, आप संदेश भेज और प्राप्त कर सकते हैं।

संदेश भेजना:

let message = URLSessionWebSocketTask.Message.string("Hello, WebSocket!")
webSocketTask.send(message) { error in
    if let error = error {
        print("WebSocket couldn't send message because: \(error)")
    }
}

संदेश प्राप्त करना:

webSocketTask.receive { result in
    switch result {
    case .failure(let error):
        print("WebSocket couldn't receive message because: \(error)")
    case .success(let message):
        switch message {
        case .string(let text):
            print("Received text: \(text)")
        case .data(let data):
            print("Received data: \(data)")
        @unknown default:
            fatalError()
        }
    }
}

3. कनेक्शन बंद करना

जब आप WebSocket कनेक्शन का उपयोग करना समाप्त कर लें, तो इसे बंद करना महत्वपूर्ण है।

webSocketTask.cancel(with: .goingAway, reason: nil)

4. पिंग और पोंग

WebSocket कनेक्शन को सक्रिय रखने के लिए, आप पिंग और पोंग संदेश भेज सकते हैं।

पिंग भेजना:

webSocketTask.sendPing { error in
    if let error = error {
        print("Ping failed: \(error)")
    }
}

पोंग प्राप्त करना:

पोंग संदेश स्वचालित रूप से प्राप्त होते हैं जब सर्वर पिंग का जवाब देता है।

5. त्रुटि प्रबंधन

WebSocket कनेक्शन के दौरान होने वाली त्रुटियों को संभालना महत्वपूर्ण है। आप URLSessionWebSocketTask के receive और send मेथड्स में त्रुटि हैंडलिंग को शामिल कर सकते हैं।

webSocketTask.receive { result in
    switch result {
    case .failure(let error):
        print("WebSocket error: \(error)")
    case .success(let message):
        // Handle message
    }
}

6. पूर्ण उदाहरण

यहां एक पूर्ण उदाहरण दिया गया है जो WebSocket कनेक्शन स्थापित करता है, संदेश भेजता और प्राप्त करता है, और कनेक्शन को बंद करता है:

import Foundation

let url = URL(string: "wss://your.websocket.server")!
let webSocketTask = URLSession.shared.webSocketTask(with: url)
webSocketTask.resume()

// Send a message
let message = URLSessionWebSocketTask.Message.string("Hello, WebSocket!")
webSocketTask.send(message) { error in
    if let error = error {
        print("WebSocket couldn't send message because: \(error)")
    }
}

// Receive a message
webSocketTask.receive { result in
    switch result {
    case .failure(let error):
        print("WebSocket couldn't receive message because: \(error)")
    case .success(let message):
        switch message {
        case .string(let text):
            print("Received text: \(text)")
        case .data(let data):
            print("Received data: \(data)")
        @unknown default:
            fatalError()
        }
    }
}

// Close the connection
webSocketTask.cancel(with: .goingAway, reason: nil)

यह उदाहरण iOS ऐप में WebSocket का उपयोग करने के लिए एक बुनियादी संरचना प्रदान करता है। आप अपनी आवश्यकताओं के अनुसार इसे और विकसित कर सकते हैं।

लोकप्रिय iOS WebSocket लाइब्रेरीज़:

SRWebSocket का उपयोग

  1. आरंभीकरण और कनेक्शन:
    SRWebSocket *webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://echo.websocket.org"]]];
    webSocket.delegate = self;
    [webSocket open];
    
  2. संदेश भेजें:
    [webSocket send:@"Hello, World!"];
    
  3. संदेश प्राप्त करें: आने वाले संदेशों और घटनाओं को संभालने के लिए SRWebSocketDelegate विधियों को लागू करें।

  4. त्रुटि प्रबंधन और घटना सूचना: त्रुटियों को उचित तरीके से संभालें और उपयोगकर्ताओं को कनेक्शन समस्याओं के बारे में सूचित करें।

WebSocket प्रोटोकॉल का विस्तृत विवरण

WebSocket एक कंप्यूटर संचार प्रोटोकॉल है जो एक ही TCP कनेक्शन पर पूर्ण-डुप्लेक्स संचार प्रदान करता है। यह HTTP प्रोटोकॉल के ऊपर बनाया गया है और इसे मुख्य रूप से वेब ब्राउज़र और सर्वर के बीच रीयल-टाइम संचार के लिए डिज़ाइन किया गया है। WebSocket प्रोटोकॉल को RFC 6455 द्वारा परिभाषित किया गया है।

WebSocket प्रोटोकॉल के मुख्य विशेषताएं:

  1. पूर्ण-डुप्लेक्स संचार: WebSocket क्लाइंट और सर्वर दोनों एक ही समय पर डेटा भेज और प्राप्त कर सकते हैं।
  2. कम ओवरहेड: HTTP की तुलना में WebSocket में डेटा ट्रांसमिशन का ओवरहेड कम होता है।
  3. रीयल-टाइम संचार: WebSocket रीयल-टाइम एप्लिकेशन जैसे चैट, गेमिंग, और लाइव डेटा स्ट्रीमिंग के लिए आदर्श है।

WebSocket हैंडशेक:

WebSocket कनेक्शन स्थापित करने के लिए, क्लाइंट और सर्वर के बीच एक हैंडशेक प्रक्रिया होती है। यह प्रक्रिया HTTP प्रोटोकॉल का उपयोग करती है।

  1. क्लाइंट अनुरोध: क्लाइंट एक HTTP अनुरोध भेजता है जिसमें Upgrade: websocket और Connection: Upgrade हेडर शामिल होते हैं।
  2. सर्वर प्रतिक्रिया: सर्वर अनुरोध को स्वीकार करता है और एक HTTP प्रतिक्रिया भेजता है जिसमें 101 Switching Protocols स्टेटस कोड होता है।
  3. कनेक्शन स्थापित: एक बार हैंडशेक पूरा हो जाने के बाद, क्लाइंट और सर्वर के बीच WebSocket कनेक्शन स्थापित हो जाता है।

WebSocket फ्रेम:

WebSocket डेटा को फ्रेम के रूप में ट्रांसमिट करता है। प्रत्येक फ्रेम में निम्नलिखित भाग होते हैं:

WebSocket उपयोग के उदाहरण:

// क्लाइंट साइड JavaScript उदाहरण
const socket = new WebSocket('ws://example.com/socket');

socket.onopen = function(event) {
    console.log('WebSocket कनेक्शन स्थापित');
    socket.send('Hello Server!');
};

socket.onmessage = function(event) {
    console.log('सर्वर से प्राप्त संदेश: ' + event.data);
};

socket.onclose = function(event) {
    console.log('WebSocket कनेक्शन बंद');
};
# सर्वर साइड Python उदाहरण (websockets लाइब्रेरी का उपयोग करके)
import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        await websocket.send(message)

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

WebSocket प्रोटोकॉल का उपयोग करके, डेवलपर्स अधिक कुशल और रीयल-टाइम संचार सुविधाओं वाले एप्लिकेशन बना सकते हैं।

WebSocket TCP पर चलता है और इसमें कई सुधार शामिल हैं:

WebSocket प्रोटोकॉल का मूल

WebSocket प्रोटोकॉल एक ऐसा प्रोटोकॉल है जो क्लाइंट और सर्वर के बीच द्विदिश संचार (bidirectional communication) को सक्षम बनाता है। यह HTTP प्रोटोकॉल पर आधारित है, लेकिन इसे इस तरह से डिज़ाइन किया गया है कि यह कनेक्शन को लंबे समय तक खुला रख सकता है और डेटा को कम ओवरहेड के साथ ट्रांसमिट कर सकता है। WebSocket प्रोटोकॉल के कुछ मुख्य तत्व निम्नलिखित हैं:

  1. हैंडशेक (Handshake): WebSocket कनेक्शन की शुरुआत एक HTTP हैंडशेक से होती है। क्लाइंट एक HTTP अनुरोध (request) भेजता है जिसमें Upgrade: websocket हेडर शामिल होता है। यदि सर्वर WebSocket कनेक्शन को स्वीकार करता है, तो यह एक HTTP प्रतिक्रिया (response) भेजता है जिसमें 101 Switching Protocols स्टेटस कोड होता है।

  2. फ्रेमिंग (Framing): WebSocket डेटा को फ्रेम्स (frames) के रूप में ट्रांसमिट करता है। प्रत्येक फ्रेम में एक छोटा हेडर होता है जो डेटा के प्रकार और लंबाई को निर्दिष्ट करता है। यह फ्रेमिंग मैकेनिज्म WebSocket को डेटा को कुशलतापूर्वक ट्रांसमिट करने में सक्षम बनाता है।

  3. द्विदिश संचार (Bidirectional Communication): एक बार कनेक्शन स्थापित हो जाने के बाद, क्लाइंट और सर्वर दोनों किसी भी समय डेटा भेज और प्राप्त कर सकते हैं। यह HTTP के अनुरोध-प्रतिक्रिया मॉडल से अलग है, जहां क्लाइंट को हमेशा अनुरोध शुरू करना पड़ता है।

  4. कनेक्शन क्लोजिंग (Connection Closing): WebSocket कनेक्शन को बंद करने के लिए, क्लाइंट या सर्वर एक क्लोज फ्रेम (close frame) भेज सकते हैं। यह फ्रेम कनेक्शन को सुरक्षित रूप से बंद करने के लिए उपयोग किया जाता है।

  5. सुरक्षा (Security): WebSocket प्रोटोकॉल में सुरक्षा के लिए TLS/SSL का उपयोग किया जा सकता है, जिसे WebSocket Secure (WSS) कहा जाता है। यह डेटा को एन्क्रिप्ट करके सुरक्षित संचार सुनिश्चित करता है।

WebSocket प्रोटोकॉल का उपयोग वास्तविक समय (real-time) एप्लिकेशन जैसे चैट एप्लिकेशन, ऑनलाइन गेमिंग, और वित्तीय ट्रेडिंग प्लेटफॉर्म में व्यापक रूप से किया जाता है। यह प्रोटोकॉल कम लेटेंसी और उच्च प्रदर्शन वाले संचार को सक्षम बनाता है।

1. हैंडशेक: WebSocket हैंडशेक HTTP अपग्रेड मैकेनिज्म का उपयोग करता है:

2. डेटा ट्रांसमिशन: WebSocket फ्रेम में UTF-8 टेक्स्ट, बाइनरी डेटा और कंट्रोल फ्रेम, जैसे कि बंद करना, पिंग और पोंग, शामिल हो सकते हैं।

3. सुरक्षा: ब्राउज़र स्वचालित रूप से Origin हेडर जोड़ता है, जिसे अन्य क्लाइंट द्वारा नकली नहीं बनाया जा सकता है।

WebSocket URI

WebSocket फ्रेम प्रोटोकॉल

फ्रेम संरचना:

मास्किंग कुंजी (Masking Key): यह मध्यस्थ हमलों (Man-in-the-Middle Attacks) को रोकने के लिए क्लाइंट के फ्रेम को मास्क करने के लिए उपयोग की जाती है।

हैंडशेक बंद करना

बंद फ्रेम (Close Frame):

उदाहरण

उदाहरण 1: बिना मास्क वाला सिंगल फ्रेम टेक्स्ट संदेश

0x81 0x05 0x48 0x65 0x6c 0x6c 0x6f

इसमें “Hello” शामिल है।

उदाहरण 2: सिंगल फ्रेम मास्क किए गए टेक्स्ट संदेश

0x81 0x85 0x37 0xfa 0x21 0x3d 0x7f 0x9f 0x4d 0x51 0x58

इसमें “Hello” शामिल है, जो मास्क कुंजी के साथ है।

उदाहरण 3: शार्डेड अनमास्क टेक्स्ट संदेश

0x01 0x03 0x48 0x65 0x6c
0x80 0x02 0x6c 0x6f

शार्ड में “Hel” और “lo” दो फ्रेम शामिल हैं।

उन्नत विषय

मास्किंग और अनमास्किंग:

शार्डिंग (Sharding):

कंट्रोल फ्रेम:

विस्तारणीयता (Scalability)

एक्सटेंशन डेटा को मैसेज बॉडी के एप्लिकेशन डेटा से पहले रखा जा सकता है:

भेजें:

हैंडशेक बंद करना:

कनेक्शन बंद करना:

संदर्भ सामग्री

आभार

सभी का धन्यवाद। यदि आपके पास और प्रश्न या चर्चा हैं, तो कृपया GitHub या Weibo पर मुझसे संपर्क करने में संकोच न करें।


Back 2025.01.18 Donate