Как обновить книгу заказов poloniex через push api (протокол WAMP)

Я делаю программное обеспечение для скальпирования на poloniex.com Для этого мне нужно иметь свежую информацию о книге заказов. API ДОКУМЕНТАЦИЯ говорит о push api. Как я понимаю, это работает так:

  1. Используйте returnOrderBook (public method API) для получения моментального снимка
  2. Возьмите порядковый номер (ключ seq) от ответа
  3. Подпишитесь на push api с порядковым номером из моментального снимка
  4. Получайте свежие данные и корректируйте данные моментальных снимков.

    <?php namespace Crypto\Scalper\Cli; use AppConfig; use Monolog\Logger; use Monolog\Handler\StreamHandler; use AndreasGlaser\PPC\PPC; use Thruway\ClientSession; use Thruway\Peer\Client; use Thruway\Transport\PawlTransportProvider; use Psr\Log\NullLogger; /** * Class PoloniexSyncCli * @package Crypto\Scalper\Cli */ class PoloniexSyncCli { private $log; private $orderbooks; /** * Constructor. */ public function __construct() { // Logging $this->log = new Logger('PoloniexSyncCli'); $this->log->pushHandler(new StreamHandler('php://stdout', Logger::DEBUG)); } public function loop() { $this->log->info('Sync poloniex data'); while (true) { $this->getOrderbooks(); $this->subscribe(); sleep(10); } } /** * Get orderbook snapshot */ private function getOrderbooks() { $this->log->info('Getting order book snapshot (REST API)'); $poloniex = AppConfig::get('poloniex'); $ppc = new PPC($poloniex['apiKey'], $poloniex['secret']); $result = $ppc->getOrderBook('USDT_BTC', 50); if (array_key_exists('error', $result->decoded)) { $this->log->error("Error on REST API request: {$result->decoded['error']}"); exit; } $this->orderbooks = $result->decoded; $this->log->info("Seq: {$this->orderbooks['seq']}"); // THIS IS sequence number } /** * Subscribe to feed for getting fresh orderbook data */ private function subscribe() { $this->log->info('Subscribe to feed (WAMP)'); $client = new Client("realm1"); $client->addTransportProvider(new PawlTransportProvider("wss://api.poloniex.com")); $client->on('open', function (ClientSession $session) { $marketEvent = function ($args, $argsKw, $details, $publicationId) { echo "Orderbook update: seq: $argsKw->seq, args count: ".count($args)."\n"; }; /** * All problem here * As i understand right i need send seq number on subscribe * and start recive data from that number * But i recive data with another numbers -( */ $session->subscribe('USDT_BTC', $marketEvent, ['seq' => $this->orderbooks['seq']]); }); $client->on('close', function ($reason){ $this->log->info("Соединение с Web socket было закрыто со стороны сервера, причина: $reason"); }); $client->on('error', function ($errorUri){ $this->log->error("Произошла ошибка во время синхронизации по Web socket, причина: $errorUri"); exit; }); $client->start(); } } 

Это журнал скриптов:

  ./poloniex-sync.php PoloniexSyncCli.INFO: Sync poloniex data PoloniexSyncCli.INFO: Getting order book snapshot (REST API) PoloniexSyncCli.INFO: Seq: 106470819 PoloniexSyncCli.INFO: Subscribe to feed (WAMP) Orderbook update: seq: 106307669, args count: 2 Orderbook update: seq: 106307670, args count: 2 Orderbook update: seq: 106307671, args count: 1 Orderbook update: seq: 106307672, args count: 5 Orderbook update: seq: 106307673, args count: 2 Orderbook update: seq: 106307674, args count: 2 Orderbook update: seq: 106307675, args count: 1 Orderbook update: seq: 106307676, args count: 2 Orderbook update: seq: 106307677, args count: 1 Orderbook update: seq: 106307678, args count: 1 Orderbook update: seq: 106307679, args count: 2 Orderbook update: seq: 106307680, args count: 1 Orderbook update: seq: 106307681, args count: 2 Orderbook update: seq: 106307682, args count: 1 Orderbook update: seq: 106307683, args count: 1 Orderbook update: seq: 106307684, args count: 1 

Как вы можете видеть, номер последовательности в снимке: 106470819 Но порядковый номер, полученный из push API, не коррелирует с порядковым номером моментального снимка: 106307669, 106307670, …

Для работы с WAMP я использую Thruway. Я читаю документы и googling, но не могу найти решение.

PS Теперь я думаю, что я не понимаю, как работает poloniex api – (PPS извините за мой уродливый английский. Это не мой родной