Použití WebSocketů
Toto je úvodní průvodce používáním WebSocketů a Alchemy k zadávání požadavků na blockchain Ethereum.
opens in a new tabWebSockets vs. HTTP
Na rozdíl od protokolu HTTP s WebSockety nemusíte neustále zadávat požadavky, když chcete získat konkrétní informace. WebSockety za vás udržují síťové připojení (pokud jsou správně nastaveny) a naslouchají změnám.
Stejně jako u jakéhokoli síťového připojení byste neměli předpokládat, že WebSocket zůstane otevřený navždy bez přerušení, ale správné ruční řešení přerušených připojení a opětovné připojení může být náročné. Další nevýhodou WebSocketů je, že v odpovědi nedostáváte stavové kódy HTTP, ale pouze chybovou zprávu.
Alchemy Web3opens in a new tab automaticky přidává zpracování selhání WebSocketu a opakované pokusy bez nutnosti konfigurace.
Vyzkoušejte si to
Nejjednodušší způsob, jak otestovat WebSockety, je nainstalovat si nástroj pro příkazový řádek pro vytváření požadavků WebSocket, jako je wscatopens in a new tab. Pomocí wscat můžete odesílat požadavky následovně:
Poznámka: pokud máte účet Alchemy, můžete nahradit demo svým vlastním klíčem API. Zaregistrujte si zde bezplatný účet Alchemy!opens in a new tab_
1wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo23> {"jsonrpc": "2.0", "id": 0, "method": "eth_gasPrice"}45< {"jsonrpc": "2.0", "result": "0xb2d05e00", "id": 0}6Jak používat WebSockety
Pro začátek otevřete WebSocket pomocí adresy URL WebSocketu pro vaši aplikaci. URL WebSocketu pro vaši aplikaci najdete tak, že otevřete stránku aplikace ve svém ovládacím paneluopens in a new tab a kliknete na „View Key“. Všimněte si, že adresa URL vaší aplikace pro WebSockety se liší od její adresy URL pro požadavky HTTP, ale obě najdete kliknutím na „View Key“.
Jakékoli z API uvedených v referenční příručce Alchemy APIopens in a new tab lze použít přes WebSocket. K tomu použijte stejný payload, který by byl odeslán jako tělo požadavku HTTP POST, ale místo toho jej odešlete prostřednictvím WebSocketu.
S Web3
Přechod na WebSockety při použití klientské knihovny, jako je Web3, je jednoduchý. Při vytváření instance klienta Web3 jednoduše předejte URL WebSocketu místo URL protokolu HTTP. Například:
1const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/vas-api-klic")23web3.eth.getBlockNumber().then(console.log) // -> 7946893API pro přihlášení k odběru
Po připojení přes WebSocket můžete použít dvě další metody: eth_subscribe a eth_unsubscribe. Tyto metody vám umožní naslouchat konkrétním událostem a být o nich okamžitě informováni.
eth_subscribe
Vytvoří nové přihlášení k odběru pro zadané události. Zjistěte více o eth_subscribeopens in a new tab.
Parametry
- Typy přihlášení k odběru
- Volitelné parametry
První argument určuje typ události, které se má naslouchat. Druhý argument obsahuje další možnosti, které závisí na prvním argumentu. Různé typy popisů, jejich možnosti a payloady událostí jsou popsány níže.
Návratové hodnoty
ID přihlášení k odběru: Toto ID bude připojeno ke všem přijatým událostem a lze ho také použít ke zrušení přihlášení k odběru pomocí eth_unsubscribe.
Události přihlášení k odběru
Zatímco je přihlášení k odběru aktivní, budete dostávat události, které jsou objekty s následujícími poli:
jsonrpc: Vždy "2.0"method: Vždy "eth_subscription"params: Objekt s následujícími poli:subscription: ID přihlášení k odběru vrácené volánímeth_subscribe, které toto přihlášení k odběru vytvořilo.result: Objekt, jehož obsah se liší v závislosti na typu přihlášení k odběru.
Typy přihlášení k odběru
alchemy_newFullPendingTransactions
Vrací informace o transakcích pro všechny transakce, které jsou přidány do nevyřízeného stavu. Tento typ přihlášení k odběru se přihlásí k odběru nevyřízených transakcí, podobně jako standardní volání Web3 web3.eth.subscribe("pendingTransactions"), ale liší se v tom, že emituje úplné informace o transakci, nikoli pouze haše transakcí.
Např.:
1> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["alchemy_newFullPendingTransactions"]}23< {"id":1,"result":"0x9a52eeddc2b289f985c0e23a7d8427c8","jsonrpc":"2.0"}4< {5 "jsonrpc":"2.0",6 "method":"eth_subscription",7 "params":{8 "result":{9 "blockHash":null,10 "blockNumber":null,11 "from":"0xa36452fc31f6f482ad823cd1cf5515177d57667f",12 "gas":"0x1adb0",13 "gasPrice":"0x7735c4d40",14 "hash":"0x50bff0736c713458c92dd1848d12f3354149be1363123dae35e94e0f2a9d56bf",15"input":"0xa9059cbb0000000000000000000000000d0707963952f2fba59dd06f2b425ace40b492fe0000000000000000000000000000000000000000000015b1111266cfca100000",16 "nonce":"0x0",17 "to":"0xea38eaa3c86c8f9b751533ba2e562deb9acded40",18 "transactionIndex":null,19 "value":"0x0",20 "v":"0x26",21 "r":"0x195c2c1ed126088e12d290aa93541677d3e3b1d10f137e11f86b1b9227f01e3b",22 "s":"0x60fc4edbf1527832a2a36dbc1e63ed6193a6eee654472fbebbf88ef1750b5344"},23 "subscription":"0x9a52eeddc2b289f985c0e23a7d8427c8"24 }25 }26Zobrazit všenewHeads
Emituje událost vždy, když je do řetězce přidána nová hlavička, a to i během reorganizace řetězce.
Když dojde k reorganizaci řetězce, toto přihlášení k odběru bude emitovat událost obsahující všechny nové hlavičky pro nový řetězec. Zejména to znamená, že se může stát, že uvidíte více hlaviček emitovaných se stejnou výškou, a když k tomu dojde, měla by být pozdější hlavička po reorganizaci považována za tu správnou.
Např.:
1> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newHeads"]}23< {"jsonrpc":"2.0","id":2,"result":"0x9ce59a13059e417087c02d3236a0b1cc"}4< {5 "jsonrpc": "2.0",6 "method": "eth_subscription",7 "params": {8 "result": {9 "extraData": "0xd983010305844765746887676f312e342e328777696e646f7773",10 "gasLimit": "0x47e7c4",11 "gasUsed": "0x38658",12 "logsBloom":13"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",14 "nonce": "0x084149998194cc5f",15 "number": "0x1348c9",16 "parentHash": "0x7736fab79e05dc611604d22470dadad26f56fe494421b5b333de816ce1f25701",17 "receiptRoot": "0x2fab35823ad00c7bb388595cb46652fe7886e00660a01e867824d3dceb1c8d36",18 "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",19 "stateRoot": "0xb3346685172db67de536d8765c43c31009d0eb3bd9c501c9be3229203f15f378",20 "timestamp": "0x56ffeff8",21 "transactionsRoot": "0x0167ffa60e3ebc0b080cdb95f7c0087dd6c0e61413140e39d94d3468d7c9689f"22 },23 "subscription": "0x9ce59a13059e417087c02d3236a0b1cc"24 }25}26Zobrazit všelogs
Emituje záznamy, které jsou součástí nově přidaných bloků, které odpovídají zadaným kritériím filtru.
Když dojde k reorganizaci řetězce, záznamy, které jsou součástí bloků ve starém řetězci, budou znovu emitovány s vlastností removed nastavenou na true. Dále se emitují záznamy, které jsou součástí bloků v novém řetězci, což znamená, že v případě reorganizace je možné vidět záznamy pro stejnou transakci vícekrát.
Parametry
- Objekt s následujícími poli:
address(volitelné): buď řetězec představující adresu, nebo pole takových řetězců.- Budou emitovány pouze záznamy vytvořené z jedné z těchto adres.
topics: pole specifikátorů témat.- Každý specifikátor tématu je buď
null, řetězec představující téma, nebo pole řetězců. - Každá pozice v poli, která není
null, omezuje emitované záznamy pouze na ty, které mají na dané pozici jedno z daných témat.
- Každý specifikátor tématu je buď
Některé příklady specifikací témat:
[]: Všechna témata jsou povolena.[A]: A na první pozici (a cokoliv dalšího).[null, B]: Cokoliv na první pozici a B na druhé pozici (a cokoliv dalšího).[A, B]: A na první pozici a B na druhé pozici (a cokoliv dalšího).[[A, B], [A, B]]: (A nebo B) na první pozici a (A nebo B) na druhé pozici (a cokoliv dalšího).
Např.:
1> {"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["logs", {"address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd", "topics": ["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"]}]}23< {"jsonrpc":"2.0","id":2,"result":"0x4a8a4c0517381924f9838102c5a4dcb7"}4< {5 "jsonrpc": "2.0",6 "method": "eth_subscription",7 "params": {8 "subscription": "0x4a8a4c0517381924f9838102c5a4dcb7",9 "result": {10 "address": "0x8320fe7702b96808f7bbc0d4a888ed1468216cfd",11 "blockHash": "0x61cdb2a09ab99abf791d474f20c2ea89bf8de2923a2d42bb49944c8c993cbf04",12 "blockNumber": "0x29e87",13 "data": "0x00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003",14 "logIndex":"0x0",15 "topics":["0xd78a0cb8bb633d06981248b816e7bd33c2a35a6089241d099fa519e361cab902"],16 "transactionHash": "0xe044554a0a55067caafd07f8020ab9f2af60bdfe337e395ecd84b4877a3d1ab4",17 "transactionIndex": "0x0"18 }19 }20}21Zobrazit všeeth_unsubscribe
Zruší existující přihlášení k odběru, takže nebudou odesílány žádné další události.
Parametry
- ID přihlášení k odběru, jak bylo dříve vráceno z volání
eth_subscribe.
Návratová hodnota
true, pokud bylo přihlášení k odběru úspěšně zrušeno, nebo false, pokud s daným ID žádné přihlášení k odběru neexistovalo.
Např.:
Požadavek
1curl https://eth-mainnet.alchemyapi.io/v2/vas-api-klic2-X POST3-H "Content-Type: application/json"4-d '{"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}'5Výsledek
1{2 "jsonrpc": "2.0",3 "id": 1,4 "result": true5}Zaregistrujte se zdarma u Alchemyopens in a new tab, podívejte se na naši dokumentaciopens in a new tab a pro nejnovější zprávy nás sledujte na Twitteruopens in a new tab.
Stránka naposledy aktualizována: 1. října 2025
