Как узнать о количестве буферизованных данных websocket ws nodejs?

Имеется внешний сервер биржи, к которому я, как клиент подключаюсь при помощи ReconnectingWebSocket на слабом PC Ситуация: Читаю сообщения ws.onmessage. Сообщения поступают с приличной скоростью- порядка 100-200 мс. Я сравниваю время своего клиента и время сервера (это информация от самой биржи api). Разница времени постоянно растет, начиная с примерно 1-2 секунд и доходит до более 1 минуты ( за то время пока я тестировал).

Следующая ситуация: Запустил клиент подождал несколько минут, отключил интернет а информация в консоли все еще поступает - обрабатывается ( моим кодом), И только спустя примерно 30 секунд ошибка timeout. Таким образом я полагаю, что информация в ws поступает быстрее чем может обрабатываться. Эта информация- сообщения накапливаются в сокете, а когда я разорвал интернет соединение, то все накопленные сообщения обрабатывались в течении 30 секунд пока автоматически не отключился сокет по ошибке timeout.

Протестировал на мощном PC, такого эффекта не наблюдалось.

Вопрос. Есть ли свойство в ws клиенте показывающее количество необработанных сообщений?

Я не нашел такого свойства в API. Есть свойство bufferedAmount, но это не оно - это буфер сообщений отправленных серверу, но еще не доставленные ему ws.send()

Подключение ReconnectingWebSocket :

const WS = require('ws');

 const options = {
  WebSocket: WS, // custom WebSocket constructor
  connectionTimeout: 5000,
};

const ws = new ReconnectingWebSocket(config.get('WS_URL_GATE_v4'), [], options);

Вот содержимое ReconnectingWebSocket :

  _listeners: { error: [], message: [], open: [], close: [] },
  _retryCount: 0,
  _shouldReconnect: true,
  _connectLock: false,
  _binaryType: 'blob',
  _closeCalled: false,
  _messageQueue: [],
  onclose: [Function (anonymous)],
  onerror: [Function (anonymous)],
  onmessage: [Function (anonymous)],
  onopen: [Function (anonymous)],
  _handleOpen: [Function (anonymous)],
  _handleMessage: [Function (anonymous)],
  _handleError: [Function (anonymous)],
  _handleClose: [Function (anonymous)],
  _url: 'wss://api.gateio.ws/ws/v4/',
  _protocols: [],
  _options: {
    WebSocket: [class WebSocket extends EventEmitter] {
      CONNECTING: 0,
      OPEN: 1,
      CLOSING: 2,
      CLOSED: 3,
      createWebSocketStream: [Function: createWebSocketStream],
      Server: [class WebSocketServer extends EventEmitter],
      Receiver: [class Receiver extends Writable],
      Sender: [class Sender]
    },
    connectionTimeout: 5000,
    perMessageDeflate: false
  },
  _ws: <ref *1> WebSocket {
    _events: [Object: null prototype] {
      open: [Function],
      close: [Function],
      message: [Function],
      error: [Function]
    },
    _eventsCount: 4,
    _maxListeners: undefined,
    _binaryType: 'nodebuffer',
    _closeCode: 1006,
    _closeFrameReceived: false,
    _closeFrameSent: false,
    _closeMessage: '',
    _closeTimer: null,
    _extensions: { 'permessage-deflate': [PerMessageDeflate] },
    _protocol: '',
    _readyState: 1,
    _receiver: Receiver {
      _writableState: [WritableState],
      _events: [Object: null prototype],
      _eventsCount: 6,
      _maxListeners: undefined,
      _binaryType: 'nodebuffer',
      _extensions: [Object],
      _isServer: false,
      _maxPayload: 104857600,
      _bufferedBytes: 0,
      _buffers: [],
      _compressed: true,
      _payloadLength: 301,
      _mask: undefined,
      _fragmented: 0,
      _masked: false,
      _fin: true,
      _opcode: 1,
      _totalPayloadLength: 0,
      _messageLength: 0,
      _fragments: [],
      _state: 5,
      _loop: false,
      [Symbol(kCapture)]: false,
      [Symbol(websocket)]: [Circular *1]
    },
    _sender: Sender {
      _extensions: [Object],
      _socket: [TLSSocket],
      _firstFragment: true,
      _compress: false,
      _bufferedBytes: 0,
      _deflating: false,
      _queue: []
    },
    _socket: TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'api.gateio.ws',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 6,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'api.gateio.ws',
      _readableState: [ReadableState],
      _maxListeners: undefined,
      _writableState: [WritableState],
      allowHalfOpen: false,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      parser: null,
      _httpMessage: null,
      timeout: 0,
      [Symbol(res)]: [TLSWrap],
      [Symbol(verified)]: true,
      [Symbol(pendingSession)]: null,
      [Symbol(async_id_symbol)]: 21,
      [Symbol(kHandle)]: [TLSWrap],
      [Symbol(kSetNoDelay)]: true,
      [Symbol(lastWriteQueueSize)]: 0,
      [Symbol(timeout)]: null,
      [Symbol(kBuffer)]: null,
      [Symbol(kBufferCb)]: null,
      [Symbol(kBufferGen)]: null,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesRead)]: 0,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(connect-options)]: [Object],
      [Symbol(RequestTimeout)]: undefined,
      [Symbol(websocket)]: [Circular *1]
    },
    _bufferedAmount: 0,
    _isServer: false,
    _redirects: 0,
    _url: 'wss://api.gateio.ws/ws/v4/',
    _req: null,
    [Symbol(kCapture)]: false
  },
  _connectTimeout: Timeout {
    _idleTimeout: -1,
    _idlePrev: null,
    _idleNext: null,
    _idleStart: 567,
    _onTimeout: null,
    _timerArgs: undefined,
    _repeat: null,
    _destroyed: true,
    [Symbol(refed)]: true,
    [Symbol(kHasPrimitive)]: false,
    [Symbol(asyncId)]: 25,
    [Symbol(triggerId)]: 0
  },
  _uptimeTimeout: Timeout {
    _idleTimeout: 5000,
    _idlePrev: null,
    _idleNext: null,
    _idleStart: 2880,
    _onTimeout: [Function (anonymous)],
    _timerArgs: undefined,
    _repeat: null,
    _destroyed: true,
    [Symbol(refed)]: true,
    [Symbol(kHasPrimitive)]: false,
    [Symbol(asyncId)]: 143,
    [Symbol(triggerId)]: 21
  }
}

Ответы (0 шт):