Cliente WebSocket

Al desarrollar un conector para una serie de exchanges, un componente importante es el cliente WebSocket, que proporciona la recuperación de datos en tiempo real. En StockSharp, para este propósito, a menudo se crea una clase SocketClient al desarrollar un conector, construida sobre la base de WebSocketClient.

Características de WebSocketClient

WebSocketClient es una clase del sistema desarrollada para la reconexión automática en caso de pérdida de la conexión WebSocket. Su código fuente está disponible en el repositorio Ecng.

Estructura de SocketClient

SocketClient generalmente incluye los siguientes elementos clave:

  1. Constructor
  • Inicializa el WebSocketClient base
  • Configura los manejadores de eventos
  1. Métodos de conexión y desconexión
  • Connect / ConnectAsync
  • Disconnect
  1. Métodos de suscripción para diferentes tipos de datos
  • Por ejemplo, SubscribeTrades, SubscribeOrderBook
  1. Métodos de cancelación de suscripción para datos
  • Métodos de cancelación de suscripción correspondientes para cada tipo de suscripción
  1. Manejadores de eventos
  • Para manejar diferentes tipos de mensajes entrantes
  1. Métodos auxiliares
  • Para formar mensajes de suscripción/cancelación de suscripción
  • Para procesar los datos recibidos
class SocketClient : BaseLogReceiver
{
	private readonly WebSocketClient _client;
	private readonly Authenticator _authenticator;

	// Eventos para distintos tipos de datos
	public event Action<Heartbeat> HeartbeatReceived;
	public event Action<Ticker> TickerReceived;
	public event Action<Trade> TradeReceived;
	public event Action<string, string, IEnumerable<OrderBookChange>> OrderBookReceived;
	public event Action<Order> OrderReceived;
	public event Action<Exception> Error;
	public event Action Connected;
	public event Action<bool> Disconnected;

	public SocketClient(Authenticator authenticator, int reconnectAttempts)
	{
		_authenticator = authenticator;
		_client = new WebSocketClient(/* parámetros */);
		_client.ReconnectAttempts = reconnectAttempts;
	}

	public ValueTask Connect(CancellationToken cancellationToken)
	{
		// Lógica de conexión
	}

	public void Disconnect()
	{
		// Lógica de desconexión
	}

	public ValueTask SubscribeTicker(string symbol, CancellationToken cancellationToken)
	{
		// Lógica de suscripción a ticker
	}

	public ValueTask UnSubscribeTicker(string symbol, CancellationToken cancellationToken)
	{
		// Lógica de cancelación de suscripción a ticker
	}

	// Métodos similares para otros tipos de suscripciones (operaciones, libro de órdenes, etc.)

	private void OnProcess(dynamic obj)
	{
		// Procesar mensajes entrantes
	}

	// Métodos auxiliares
}

Recomendaciones de Implementación

  • Adapte la estructura de SocketClient al exchange específico, teniendo en cuenta las particularidades de su API.
  • Utilice métodos asíncronos para un trabajo eficiente con WebSocket.
  • Implemente el manejo de diferentes tipos de mensajes del exchange.
  • Asegure un manejo adecuado de errores y la reconexión tras la pérdida de la conexión.

Recuerde que la implementación específica puede diferir según los requisitos y las particularidades de la API de un exchange en particular.