मुख्य सामग्री पर जाएं

WebSockets का उपयोग करना

alchemy
websockets
क्वेरी करना
javascript
शुरुआती
एलन हैल्पर्न
1 दिसंबर 2020
7 मिनट पढ़ें

यह इथेरियम ब्लॉकचेन से अनुरोध करने के लिए WebSockets और Alchemy का उपयोग करने के लिए एक शुरुआती स्तर की मार्गदर्शिका है।

 (एक नए टैब में खुलता है)WebSockets बनाम HTTP

HTTP के विपरीत, WebSockets के साथ, जब आपको विशिष्ट जानकारी चाहिए होती है तो आपको लगातार अनुरोध करने की आवश्यकता नहीं होती है। WebSockets आपके लिए एक नेटवर्क कनेक्शन बनाए रखते हैं (यदि सही तरीके से किया जाए) और परिवर्तनों को सुनते हैं।

किसी भी नेटवर्क कनेक्शन की तरह, आपको यह नहीं मानना चाहिए कि एक WebSocket बिना किसी रुकावट के हमेशा खुला रहेगा, लेकिन ड्रॉप किए गए कनेक्शन और मैन्युअल रूप से फिर से कनेक्ट करने को सही ढंग से संभालना चुनौतीपूर्ण हो सकता है। WebSockets का एक और नुकसान यह है कि आपको प्रतिक्रिया में HTTP स्थिति कोड नहीं मिलते हैं, बल्कि केवल त्रुटि संदेश मिलता है।

Alchemy Web3 (एक नए टैब में खुलता है) बिना किसी कॉन्फ़िगरेशन की आवश्यकता के WebSocket विफलताओं और पुनर्प्रयासों के लिए स्वचालित रूप से हैंडलिंग जोड़ता है।

इसे आज़माएं

WebSockets का परीक्षण करने का सबसे आसान तरीका WebSocket अनुरोध करने के लिए एक कमांड लाइन टूल स्थापित करना है जैसे कि wscat (एक नए टैब में खुलता है)। wscat का उपयोग करके, आप इस प्रकार अनुरोध भेज सकते हैं:

नोट: यदि आपके पास एक Alchemy खाता है तो आप demo को अपनी स्वयं की API कुंजी से बदल सकते हैं। मुफ़्त Alchemy खाते के लिए यहाँ साइन अप करें! (एक नए टैब में खुलता है)

wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo

>  {"jsonrpc":  "2.0", "id": 0, "method":  "eth_gasPrice"}

<  {"jsonrpc":  "2.0", "result":  "0xb2d05e00", "id": 0}

WebSockets का उपयोग कैसे करें

शुरू करने के लिए, अपने ऐप के लिए WebSocket URL का उपयोग करके एक WebSocket खोलें। आप अपने डैशबोर्ड (एक नए टैब में खुलता है) में ऐप का पेज खोलकर और "View Key" पर क्लिक करके अपने ऐप का WebSocket URL पा सकते हैं। ध्यान दें कि WebSockets के लिए आपके ऐप का URL HTTP अनुरोधों के लिए इसके URL से अलग है, लेकिन दोनों को "View Key" पर क्लिक करके पाया जा सकता है।

Alchemy API संदर्भ (एक नए टैब में खुलता है) में सूचीबद्ध किसी भी API का उपयोग WebSocket के माध्यम से किया जा सकता है। ऐसा करने के लिए, उसी पेलोड का उपयोग करें जिसे HTTP POST अनुरोध के मुख्य भाग के रूप में भेजा जाएगा, लेकिन इसके बजाय उस पेलोड को WebSocket के माध्यम से भेजें।

Web3 के साथ

Web3 जैसी क्लाइंट लाइब्रेरी का उपयोग करते समय WebSockets पर जाना सरल है। अपने Web3 क्लाइंट को इंस्टेंट करते समय HTTP के बजाय बस WebSocket URL पास करें। उदाहरण के लिए:

const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key")

web3.eth.getBlockNumber().then(console.log) // -> 7946893

सदस्यता API

WebSocket के माध्यम से कनेक्ट होने पर, आप दो अतिरिक्त विधियों का उपयोग कर सकते हैं: eth_subscribe और eth_unsubscribe। ये विधियाँ आपको विशेष घटनाओं को सुनने और तुरंत सूचित किए जाने की अनुमति देंगी।

eth_subscribe

निर्दिष्ट घटनाओं के लिए एक नई सदस्यता बनाता है। eth_subscribe के बारे में अधिक जानें (एक नए टैब में खुलता है)

पैरामीटर

  1. सदस्यता के प्रकार
  2. वैकल्पिक पैरामीटर

पहला तर्क उस घटना के प्रकार को निर्दिष्ट करता है जिसे सुनना है। दूसरे तर्क में अतिरिक्त विकल्प होते हैं जो पहले तर्क पर निर्भर करते हैं। विभिन्न विवरण प्रकार, उनके विकल्प और उनके घटना पेलोड नीचे वर्णित हैं।

रिटर्न

सदस्यता ID: यह ID किसी भी प्राप्त घटनाओं से जुड़ी होगी, और इसका उपयोग eth_unsubscribe का उपयोग करके सदस्यता रद्द करने के लिए भी किया जा सकता है।

सदस्यता घटनाएँ

जब तक सदस्यता सक्रिय है, आपको घटनाएँ प्राप्त होंगी जो निम्नलिखित फ़ील्ड वाले ऑब्जेक्ट हैं:

  • jsonrpc: हमेशा "2.0"
  • method: हमेशा "eth_subscription"
  • params: निम्नलिखित फ़ील्ड वाला एक ऑब्जेक्ट:
    • subscription: eth_subscribe कॉल द्वारा लौटाई गई सदस्यता ID जिसने यह सदस्यता बनाई है।
    • result: एक ऑब्जेक्ट जिसकी सामग्री सदस्यता के प्रकार के आधार पर भिन्न होती है।

सदस्यता के प्रकार

  1. alchemy_newFullPendingTransactions

उन सभी लेन-देन के लिए लेन-देन की जानकारी लौटाता है जो लंबित स्थिति में जोड़े गए हैं। यह सदस्यता प्रकार लंबित लेन-देन की सदस्यता लेता है, जो मानक Web3 कॉल web3.eth.subscribe("pendingTransactions") के समान है, लेकिन इसमें भिन्न है कि यह केवल लेन-देन हैश के बजाय पूर्ण लेन-देन जानकारी उत्सर्जित करता है।

उदाहरण:

  1. newHeads

चेन पुनर्गठन के दौरान सहित, जब भी चेन में एक नया हेडर जोड़ा जाता है, तो एक घटना उत्सर्जित करता है।

जब चेन पुनर्गठन होता है, तो यह सदस्यता नई चेन के लिए सभी नए हेडर वाली एक घटना उत्सर्जित करेगी। विशेष रूप से, इसका मतलब है कि आप एक ही ऊंचाई के साथ कई हेडर उत्सर्जित देख सकते हैं, और जब ऐसा होता है तो बाद वाले हेडर को पुनर्गठन के बाद सही माना जाना चाहिए।

उदाहरण:

  1. logs

उन लॉग को उत्सर्जित करता है जो नए जोड़े गए ब्लॉक का हिस्सा हैं जो निर्दिष्ट फ़िल्टर मानदंडों से मेल खाते हैं।

जब चेन पुनर्गठन होता है, तो पुरानी चेन पर ब्लॉक का हिस्सा रहे लॉग फिर से उत्सर्जित किए जाएंगे जिसमें removed प्रॉपर्टी true पर सेट होगी। इसके अलावा, नई चेन पर ब्लॉक का हिस्सा रहे लॉग उत्सर्जित होते हैं, जिसका अर्थ है कि पुनर्गठन के मामले में एक ही लेन-देन के लिए कई बार लॉग देखना संभव है।

पैरामीटर

  1. निम्नलिखित फ़ील्ड वाला एक ऑब्जेक्ट:
    • address (वैकल्पिक): या तो एक पता दर्शाने वाली स्ट्रिंग या ऐसी स्ट्रिंग्स का एक एरे।
      • केवल इनमें से किसी एक पते से बनाए गए लॉग ही उत्सर्जित किए जाएंगे।
    • topics: विषय विनिर्देशकों (topic specifiers) का एक एरे।
      • प्रत्येक विषय विनिर्देशक या तो null है, एक विषय का प्रतिनिधित्व करने वाली स्ट्रिंग है, या स्ट्रिंग्स का एक एरे है।
      • एरे में प्रत्येक स्थिति जो null नहीं है, उत्सर्जित लॉग को केवल उन तक सीमित करती है जिनके पास उस स्थिति में दिए गए विषयों में से एक है।

विषय विनिर्देशों के कुछ उदाहरण:

  • []: किसी भी विषय की अनुमति है।
  • [A]: पहली स्थिति में A (और उसके बाद कुछ भी)।
  • [null, B]: पहली स्थिति में कुछ भी और दूसरी स्थिति में B (और उसके बाद कुछ भी)।
  • [A, B]: पहली स्थिति में A और दूसरी स्थिति में B (और उसके बाद कुछ भी)।
  • [[A, B], [A, B]]: पहली स्थिति में (A या B) और दूसरी स्थिति में (A या B) (और उसके बाद कुछ भी)।

उदाहरण:

eth_unsubscribe

मौजूदा सदस्यता को रद्द करता है ताकि आगे कोई घटनाएँ न भेजी जाएं।

पैरामीटर

  1. सदस्यता ID, जैसा कि पहले eth_subscribe कॉल से लौटाया गया था।

रिटर्न

true यदि सदस्यता सफलतापूर्वक रद्द कर दी गई थी, या false यदि दिए गए ID के साथ कोई सदस्यता मौजूद नहीं थी।

उदाहरण:

अनुरोध

curl https://eth-mainnet.alchemyapi.io/v2/your-api-key
-X POST
-H "Content-Type: application/json"
-d '{"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}'

परिणाम

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": true
}

मुफ़्त में Alchemy के साथ साइन अप करें (एक नए टैब में खुलता है), हमारे दस्तावेज़ (एक नए टैब में खुलता है) देखें, और नवीनतम समाचारों के लिए, हमें ट्विटर (एक नए टैब में खुलता है) पर फ़ॉलो करें।