Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ · पाठ

रिएक्टिव स्ट्रीम में बैकप्रेशर संभालना

WebFlux में Reactor बैकप्रेशर ऑपरेटरों का उपयोग करके तेज़ उत्पादकों और धीमे WebSocket क्लाइंट को प्रबंधित करें, ताकि भार के अंतर्गत स्ट्रीम स्थिर रहें।

पाठ 4, कुल 4 में से13 चरण

रिएक्टिव स्ट्रीम में बैकप्रेशर संभालना, CoddyKit पर Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

तेज़ उत्पादक और धीमे उपभोक्ता की समस्या

कोई रिएक्टिव WebSocket, क्लाइंट द्वारा उपभोग किए जा सकने की गति से अधिक तेज़ी से बाज़ार-टिक भेज सकता है। नियंत्रण के बिना बफ़र तब तक बढ़ते रहते हैं, जब तक मेमोरी समाप्त न हो जाए। इसी असंगति का समाधान बैकप्रेशर करता है।

बैकप्रेशर का अर्थ

बैकप्रेशर का अर्थ है कि उपभोक्ता उत्पादक को बताता है कि वह कितना संभाल सकता है। Reactor में सब्सक्राइबर n आइटम का अनुरोध करता है; प्रकाशक को उस माँग से अधिक नहीं भेजना चाहिए।

Reactor माँग-आधारित है

ठंडे स्रोत से बनाया गया रिएक्टिव Flux स्वाभाविक रूप से माँग का सम्मान करता है: अनुरोध किए जाने तक कुछ भी उत्पन्न नहीं होता। समस्या हॉट, समय-आधारित स्रोतों के साथ आती है, जैसे ऐसा मूल्य-फ़ीड जो माँग की परवाह किए बिना संदेश भेजता रहता है।

WebSocketHandler एक Mono लौटाता है

WebFlux में कोई हैंडलर आउटबाउंड Flux को session.send से जोड़ता है। फ़्रेमवर्क आपके लिए सब्सक्राइब करता है और ट्रांसपोर्ट की माँग लागू करता है।

public Mono<Void> handle(WebSocketSession session) {
  Flux<String> out = prices.map(p -> session.textMessage(p));
  return session.send(out);
}

onBackpressureBuffer

बफ़र में आइटम को एक सीमा तक रखें, फिर कोई कार्रवाई करें। छोटे समय के उछाल के लिए यह उपयोगी है।

flux.onBackpressureBuffer(1000,
  dropped -> log.warn("dropped {}", dropped),
  BufferOverflowStrategy.DROP_OLDEST);

onBackpressureDrop

जब उपभोक्ता धीमा हो, तो नए आइटम सीधे छोड़ दें। यह टेलीमेट्री के लिए आदर्श है, जहाँ केवल नवीनतम मान मायने रखते हैं।

flux.onBackpressureDrop(dropped -> metrics.increment("dropped"));

onBackpressureLatest

केवल सबसे नया आइटम रखें और बीच के आइटम हटा दें। यह ऐसे लाइव डैशबोर्ड के लिए बिल्कुल सही है, जो इतिहास के बजाय वर्तमान मान दिखाता है।

flux.onBackpressureLatest();

सैंपलिंग और दर-नियंत्रण

रिएक्टिव तरीके से आइटम छोड़ने के बजाय शुरुआत में ही दर कम करें। sample एक निश्चित अंतराल पर नवीनतम मान भेजता है और अत्यधिक तेज़ धारा को संभालने योग्य प्रवाह में बदल देता है।

flux.sample(Duration.ofMillis(200));

हर जगह बफ़र की सीमा तय करना

असीमित बफ़र छिपे हुए विनाशक होते हैं। हमेशा बफ़र की अधिकतम सीमा तय करें और कोई रणनीति (छोड़ना, त्रुटि, नवीनतम) चुनें, ताकि रुका हुआ क्लाइंट सर्वर की हीप समाप्त न कर सके।

अत्यधिक दबाव में आए क्लाइंट का पता लगाना

यदि कोई क्लाइंट बार-बार आइटम छोड़े जाने का कारण बनता है, तो वह फ़ीड के लिए बहुत धीमा हो सकता है। उसकी अपडेट दर कम करने, परिवर्तन भेजने या स्पष्ट स्थिति के साथ सत्र बंद करने पर विचार करें।

session.close(CloseStatus.create(1011, "client too slow"));

रणनीति चुनना

ऑपरेटर को डेटा के अनुरूप चुनें:

  • जिन ऑर्डर को खोना नहीं चाहिए → सुरक्षित सीमा वाला buffer, या त्रुटि
  • लाइव मेट्रिक्स/मूल्य → latest या sample
  • सर्वोत्तम-प्रयास टेलीमेट्री → drop

त्वरित जाँच

बैकप्रेशर की अपनी समझ की जाँच करें।

पुनरावलोकन

आपने रिएक्टिव स्ट्रीम को नियंत्रित किया:

  • बैकप्रेशर तेज़ उत्पादक और धीमे उपभोक्ता के बीच तालमेल बनाता है
  • Reactor माँग-आधारित है; हॉट स्रोतों को स्पष्ट प्रबंधन चाहिए
  • buffer, drop और latest रणनीतियाँ अलग-अलग डेटा के लिए उपयुक्त हैं
  • sample स्रोत पर ही अत्यधिक तेज़ धारा की दर कम करता है
  • बफ़र को कभी असीमित न छोड़ें; जो क्लाइंट गति बनाए नहीं रख सकते, उन्हें बंद करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “रिएक्टिव स्ट्रीम में बैकप्रेशर संभालना” पाठ निःशुल्क है?

हाँ—“रिएक्टिव स्ट्रीम में बैकप्रेशर संभालना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“रिएक्टिव स्ट्रीम में बैकप्रेशर संभालना” में मैं क्या सीखूँगा?

WebFlux में Reactor बैकप्रेशर ऑपरेटरों का उपयोग करके तेज़ उत्पादकों और धीमे WebSocket क्लाइंट को प्रबंधित करें, ताकि भार के अंतर्गत स्ट्रीम स्थिर रहें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“रिएक्टिव स्ट्रीम में बैकप्रेशर संभालना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. रिएक्टिव प्रोग्रामिंग का परिचय
  2. WebFlux WebSocket हैंडलर
  3. रिएक्टिव वास्तविक-समय सेवाएँ बनाना
  4. रिएक्टिव स्ट्रीम में बैकप्रेशर संभालना
← Spring के साथ WebSockets और वास्तविक समय की प्रणालियाँ पर वापस जाएँ