---
title: "WebSockets का उपयोग करना"
description: "JSON-RPC अनुरोध करने और घटनाओं की सदस्यता लेने के लिए WebSockets और Alchemy का उपयोग करने की मार्गदर्शिका।"
author: "एलन हैल्पर्न"
lang: hi
tags:
  - alchemy
  - websockets
  - क्वेरी करना
  - javascript
skill: beginner
breadcrumb: WebSockets
source: Alchemy docs
sourceUrl: https://www.alchemy.com/docs/reference/best-practices-for-using-websockets-in-web3
published: 2020-12-01
---

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

## WebSockets बनाम HTTP {#websockets-vs-http}

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

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

​[Alchemy Web3](https://docs.alchemy.com/reference/api-overview) बिना किसी कॉन्फ़िगरेशन की आवश्यकता के WebSocket विफलताओं और पुनर्प्रयासों के लिए स्वचालित रूप से हैंडलिंग जोड़ता है।

## इसे आज़माएं {#try-it-out}

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

_नोट: यदि आपके पास एक Alchemy खाता है तो आप `demo` को अपनी स्वयं की API कुंजी से बदल सकते हैं। [मुफ़्त Alchemy खाते के लिए यहाँ साइन अप करें!](https://auth.alchemy.com/signup)_

```
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 का उपयोग कैसे करें {#how-to-use-websockets}

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

![Where to find your WebSocket URL in your Alchemy dashboard](./use-websockets.mp4#602x280)

[Alchemy API संदर्भ](https://www.alchemy.com/docs/reference/api-overview) में सूचीबद्ध किसी भी API का उपयोग WebSocket के माध्यम से किया जा सकता है। ऐसा करने के लिए, उसी पेलोड का उपयोग करें जिसे HTTP POST अनुरोध के मुख्य भाग के रूप में भेजा जाएगा, लेकिन इसके बजाय उस पेलोड को WebSocket के माध्यम से भेजें।

## Web3 के साथ {#with-web3}

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

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

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

## सदस्यता API {#subscription-api}

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

### `eth_subscribe` {#eth-subscribe}

निर्दिष्ट घटनाओं के लिए एक नई सदस्यता बनाता है। [`eth_subscribe` के बारे में अधिक जानें](https://docs.alchemy.com/reference/eth-subscribe)।

#### पैरामीटर {#parameters}

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

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

#### रिटर्न {#returns}

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

#### सदस्यता घटनाएँ {#subscription-events}

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

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

#### सदस्यता के प्रकार {#subscription-types}

1. `alchemy_newFullPendingTransactions`

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

उदाहरण:

```json
>  {"jsonrpc":  "2.0",  "id":  1,  "method":  "eth_subscribe",  "params":  ["alchemy_newFullPendingTransactions"]}

<  {"id":1,"result":"0x9a52eeddc2b289f985c0e23a7d8427c8","jsonrpc":"2.0"}
<  {
      "jsonrpc":"2.0",
      "method":"eth_subscription",
      "params":{
          "result":{
          "blockHash":null,
          "blockNumber":null,
          "from":"0xa36452fc31f6f482ad823cd1cf5515177d57667f",
          "gas":"0x1adb0",
          "gasPrice":"0x7735c4d40",
          "hash":"0x50bff0736c713458c92dd1848d12f3354149be1363123dae35e94e0f2a9d56bf",
"input":"0xa9059cbb0000000000000000000000000d0707963952f2fba59dd06f2b425ace40b492fe0000000000000000000000000000000000000000000015b1111266cfca100000",
          "nonce":"0x0",
          "to":"0xea38eaa3c86c8f9b751533ba2e562deb9acded40",
          "transactionIndex":null,
          "value":"0x0",
          "v":"0x26",
          "r":"0x195c2c1ed126088e12d290aa93541677d3e3b1d10f137e11f86b1b9227f01e3b",
          "s":"0x60fc4edbf1527832a2a36dbc1e63ed6193a6eee654472fbebbf88ef1750b5344"},
          "subscription":"0x9a52eeddc2b289f985c0e23a7d8427c8"
      }
  }

```

2. `newHeads`

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

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

उदाहरण:

```json
>  {"jsonrpc":  "2.0",  "id":  1,  "method":  "eth_subscribe",  "params":  ["newHeads"]}

<  {"jsonrpc":"2.0","id":2,"result":"0x9ce59a13059e417087c02d3236a0b1cc"}
<  {
  "jsonrpc":  "2.0",
  "method":  "eth_subscription",
  "params":  {
      "result":  {
          "extraData":  "0xd983010305844765746887676f312e342e328777696e646f7773",
          "gasLimit":  "0x47e7c4",
          "gasUsed":  "0x38658",
          "logsBloom":
"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
          "nonce":  "0x084149998194cc5f",
          "number":  "0x1348c9",
          "parentHash":  "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701",
          "receiptRoot":  "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36",
          "sha3Uncles":  "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
          "stateRoot":  "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378",
          "timestamp":  "0x56ffeff8",
          "transactionsRoot":  "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f"
      },
  "subscription":  "0x9ce59a13059e417087c02d3236a0b1cc"
  }
}

```

3. `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) (और उसके बाद कुछ भी)।

उदाहरण:

```json
>  {"jsonrpc":  "2.0",  "id":  1,  "method":  "eth_subscribe",  "params":  ["logs",  {"address":  "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",  "topics":  ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}

<  {"jsonrpc":"2.0","id":2,"result":"0x4a8a4c0517381924f9838102c5a4dcb7"}
<  {
  "jsonrpc":  "2.0",
  "method":  "eth_subscription",
  "params":  {
      "subscription":  "0x4a8a4c0517381924f9838102c5a4dcb7",
      "result":  {
          "address":  "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",
          "blockHash":  "0x61cdb2a09ab99abf791d474f20c2ea89bf8de2923a2d42bb49944c8c993cbf04",
          "blockNumber":  "0x29e87",
          "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003",
          "logIndex":"0x0",
          "topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"],
          "transactionHash":  "0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4",
          "transactionIndex":  "0x0"
      }
  }
}

```

### `eth_unsubscribe` {#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"]}'
```

**परिणाम**

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

---

मुफ़्त में [Alchemy के साथ साइन अप करें](https://auth.alchemy.com), [हमारे दस्तावेज़](https://www.alchemy.com/docs/) देखें, और नवीनतम समाचारों के लिए, हमें [ट्विटर](https://x.com/AlchemyPlatform) पर फ़ॉलो करें।
