WebSocket клиент
При разработке коннектора для ряда бирж важным компонентом является WebSocket клиент, который обеспечивает получение данных в реальном времени. В StockSharp для этой цели часто создается при разработке коннектора класс SocketClient, построенный на основе WebSocketClient.
Особенности WebSocketClient
WebSocketClient - это системный класс, разработанный для автоматического переподключения в случае разрыва соединения по WebSocket. Его исходный код доступен в репозитории Ecng.
Структура SocketClient
SocketClient обычно включает следующие ключевые элементы:
- Конструктор
- Инициализирует базовый
WebSocketClient - Устанавливает обработчики событий
- Методы подключения и отключения
Connect/ConnectAsyncDisconnect
- Методы подписки на различные типы данных
- Например,
SubscribeTrades,SubscribeOrderBook
- Методы отписки от данных
- Соответствующие методы отписки для каждого типа подписки
- Обработчики событий
- Для обработки различных типов входящих сообщений
- Вспомогательные методы
- Для формирования сообщений подписки/отписки
- Для обработки полученных данных
class SocketClient : BaseLogReceiver
{
private readonly WebSocketClient _client;
private readonly Authenticator _authenticator;
// События для различных типов данных
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(/* параметры */);
_client.ReconnectAttempts = reconnectAttempts;
}
public ValueTask Connect(CancellationToken cancellationToken)
{
// Логика подключения
}
public void Disconnect()
{
// Логика отключения
}
public ValueTask SubscribeTicker(string symbol, CancellationToken cancellationToken)
{
// Логика подписки на тикеры
}
public ValueTask UnSubscribeTicker(string symbol, CancellationToken cancellationToken)
{
// Логика отписки от тикеров
}
// Аналогичные методы для других типов подписок (сделки, стакан и т.д.)
private void OnProcess(dynamic obj)
{
// Обработка входящих сообщений
}
// Вспомогательные методы
}
Рекомендации по реализации
- Адаптируйте структуру
SocketClientпод конкретную биржу, учитывая особенности её API. - Используйте асинхронные методы для эффективной работы с WebSocket.
- Реализуйте обработку различных типов сообщений от биржи.
- Обеспечьте корректную обработку ошибок и переподключение при разрыве соединения.
Помните, что конкретная реализация может отличаться в зависимости от требований и особенностей API конкретной биржи.