Avançar para o conteúdo
Início » Blogue » Ethereum: multiple web socket streams with asynchronous Python

Ethereum: multiple web socket streams with asynchronous Python

Ethereum and WebSockets: Creating Real-Time Data Streams with Asyncio

== ==

As a Python developer, you are probably familiar with the importance of real-time data streams in applications such as financial trading platforms. One popular way to do this is by using web sockets, a protocol that establishes two-way communication between clients and servers over the internet.

In this article, we will look at how to use asyncio (a Python asynchronous I/O library) to connect multiple websocket data streams to Ethereum using Python.

What is Asyncio?

————-

Asyncio is built on Python 3.4+ and supports I/O, coroutines, and concurrency. It allows you to write single-threaded parallel code using the async/await syntax, making it easy to write efficient and scalable asynchronous code.

Connecting to Binance Websockets

——————————–

To connect to Binance Websockets, we use the requests library with a WebSocket client. We also use asyncio to handle multiple connections simultaneously.

import asyncio

import aiohttp

async def get_websocket_data(api_key):

url = f" subscription"

params = {

"key": api_key,

"symbol": "BTCUSDT",

"event_type": "new_order",

"limit": 1

}

async with aiohttp.ClientSession() as session:

async with session.post(url, json=params) as response:

data = await response.json()

return data

async def main():

api_keys = ["API_KEY_1", "API_KEY_2", "API_KEY_3"]

tasks = [get_websocket_data(api_key) for api_key in api_keys]

responses = await asyncio.gather(*tasks)

print (responses)

if __name__ == "__main__":

asyncio.run(main())

In this example, we define a get_websocket_data function that sends a subscription request to Binance with the given API key. We can then use asyncio.gather to run multiple tasks at once.

We create a list of API keys and pass them to the get_websocket_data function using an async for loop. Each task is executed independently, allowing us to handle multiple connections simultaneously.

Output Example

—————–

The output will be a JSON object containing the latest market data from the Binance WebSocket API.

[

{'symbol': 'BTCUSDT', 'last_price': 0.0001},

{'symbol': 'BTCUSDT', 'bid': 0.001, 'ask': 0.002},

...

]

Real-time data streams

——————-

If you want to receive messages for multiple API keys at once, we can use a single asynchronous event loop and subscribe to multiple WebSocket events using the “async with” operator.

import asyncio

async def main():

api_keys = ["API_KEY_1", "API_KEY_2"]










Subscribe to market data events

async with aiohttp.ClientSession() as session:

async to response in session.get(" response:

if "ok" in response.json():

data = await response.json()

for api_key event in zip(api_keys, ['market', 'order', 'trading']):


Market data processing

print(f"Market data: {event}")


Order and trading event processing

if event['type'] == 'new_order':

print ("New order received")


Run the main function

async.run(main())

In this example, there are several We subscribe to WebSocket events using a “for” loop. We process each event one by one, sending messages to the console.

ETHEREUM TRANSACTIONS

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *