Я использую сервис websocket для получения информации от тикера. Этот тикер срабатывает каждые X мс. Это пакет, который я использую: https://github.com/jaggedsoft/php-binance-api
И вот мой код:
$api = new BinanceAPI($this->key, $this->secret);
$api->ticker(false, function($api, $symbol, $ticker) {
event(new NewTickerEvent($ticker));
});
Что происходит, так это то, что создается бесконечный цикл. Память используется, но никогда не освобождается. Я пробовал все от методов __destruct с unset, null, сборкой мусора и т. Д.
Память просто забивается, как будто она никогда не высвобождается в этом цикле.
Как я могу решить эту проблему, чтобы после каждого «тика» память освобождалась.
Новое событие тикера вызывает этот фрагмент кода (который помогает засорять память) в Слушателе:
$exchange = Exchange::where('name', 'binance')->where(function ($query) use ($symbol) {
$query->whereHas('rules', function ($query) use ($symbol) {
$query->ofPair($symbol)->whereHas('trades', function ($query) {
$query->where('active', 1)->whereHas('user.subscriptions', function ($query) {
$query->where('stripe_plan', '!=', 'free');
});
});
});
})
->first();
// Only continue if there's a trade active
if ($exchange == null) {
return;
}
$exchange->load([
'rules' => function ($query) use ($symbol) { $query->ofPair($symbol); },
'rules.trades' => function ($query) {
$query->where('active', 1)->whereHas('user.subscriptions', function ($query) {
$query->where('stripe_plan', '!=', 'free');
});
},
'rules.trades.user', 'rules.trades.targets.tradeApi',
'rules.trades.buyOrder', 'rules.trades.takeProfitOrders',
'rules.trades.originStopLossOrder', 'rules.trades.trailingStopLossOrder',
]);
Задача ещё не решена.
Других решений пока нет …