removed sleep calls, better channel sending

This commit is contained in:
Timothy Pogue
2022-10-22 19:02:05 -06:00
parent 2b6d00dde4
commit 3d7a311caa
5 changed files with 31 additions and 22 deletions

View File

@@ -1,4 +1,3 @@
import asyncio
import logging
from typing import Any, Dict
@@ -11,6 +10,7 @@ from freqtrade.enums import RPCMessageType, RPCRequestType
from freqtrade.rpc.api_server.api_auth import validate_ws_token
from freqtrade.rpc.api_server.deps import get_channel_manager, get_rpc
from freqtrade.rpc.api_server.ws import WebSocketChannel
from freqtrade.rpc.api_server.ws.channel import ChannelManager
from freqtrade.rpc.api_server.ws_schemas import (WSAnalyzedDFMessage, WSMessageSchema,
WSRequestSchema, WSWhitelistMessage)
from freqtrade.rpc.rpc import RPC
@@ -37,7 +37,8 @@ async def is_websocket_alive(ws: WebSocket) -> bool:
async def _process_consumer_request(
request: Dict[str, Any],
channel: WebSocketChannel,
rpc: RPC
rpc: RPC,
channel_manager: ChannelManager
):
"""
Validate and handle a request from a websocket consumer
@@ -72,9 +73,9 @@ async def _process_consumer_request(
whitelist = rpc._ws_request_whitelist()
# Format response
response = WSWhitelistMessage(data=whitelist)
response = WSWhitelistMessage(data=whitelist).dict(exclude_none=True)
# Send it back
await channel.send(response.dict(exclude_none=True))
await channel_manager.send_direct(channel, response)
elif type == RPCRequestType.ANALYZED_DF:
limit = None
@@ -88,10 +89,8 @@ async def _process_consumer_request(
# For every dataframe, send as a separate message
for _, message in analyzed_df.items():
response = WSAnalyzedDFMessage(data=message)
await channel.send(response.dict(exclude_none=True))
# Throttle the messages to 50/s
await asyncio.sleep(0.02)
response = WSAnalyzedDFMessage(data=message).dict(exclude_none=True)
await channel_manager.send_direct(channel, response)
@router.websocket("/message/ws")
@@ -116,7 +115,7 @@ async def message_endpoint(
request = await channel.recv()
# Process the request here
await _process_consumer_request(request, channel, rpc)
await _process_consumer_request(request, channel, rpc, channel_manager)
except (WebSocketDisconnect, WebSocketException):
# Handle client disconnects