class AmazonApiRateLimiter
{
/**
* Minimalna przerwa między zapytaniami (sekundy).
*/
const INTERVAL_SECONDS = 2;
/**
* Nazwa pliku blokady w katalogu log/.
*/
const LOCK_FILENAME = 'amazon_api_rate.lock';
/**
* @var string Pełna ścieżka do pliku blokady
*/
private $lockFilePath;
/**
* @var bool Tryb debug
*/
private $debug;
public function __construct($debug = false)
{
$this->debug = $debug;
$this->lockFilePath = MT_ROOT . '/../log/' . self::LOCK_FILENAME;
}
/**
* Czeka, jeśli ostatnie zapytanie było wykonane wcześniej niż INTERVAL_SECONDS temu.
*
* Musi być wywołane bezpośrednio przed każdym zapytaniem do Amazon API.
* Blokuje inne procesy (flock LOCK_EX) na czas weryfikacji i ewentualnego czekania,
* dzięki czemu kolejka zapytań jest respektowana globalnie.
*
* @return void
*/
public function wait()
{
$fh = fopen($this->lockFilePath, 'c+');
if ($fh === false) {
$this->debug('[DEBUG AmazonApiRateLimiter] Nie można otworzyć pliku blokady: ' . $this->lockFilePath);
return;
}
// Zablokuj - inne procesy czekają tutaj
flock($fh, LOCK_EX);
// Odczytaj czas ostatniego wywołania API
rewind($fh);
$content = fread($fh, 32);
$lastCall = (float)$content;
$now = microtime(true);
$elapsed = $now - $lastCall;
$waitTime = self::INTERVAL_SECONDS - $elapsed;
if ($waitTime > 0) {
$waitMicroseconds = (int)($waitTime * 1000000);
$this->debug('[DEBUG AmazonApiRateLimiter] Rate limit: czekam ' . round($waitTime, 3) . 's przed zapytaniem do API.');
usleep($waitMicroseconds);
}
// Zapisz aktualny timestamp jako czas ostatniego wywołania
ftruncate($fh, 0);
rewind($fh);
fwrite($fh, microtime(true));
fflush($fh);
// Zwolnij blokadę - następny proces może wejść
flock($fh, LOCK_UN);
fclose($fh);
}
/**
* Wypisuje komunikat diagnostyczny na stdout, jeśli tryb debug jest włączony.
*
* @param string $msg
* @return void
*/
private function debug($msg)
{
if ($this->debug) {
echo $msg . "\n";
}
}
}
?>
|
Отзывы пользователей: 0
|
Отзывы пользователей: 0
|
|
|
|
|
Виды |
Сенсорный | Сенсорный |
|
Водо- и пылезащита |
 | IP68 |
|
Размер |
160.80 x 76.60 x 11.10 mm | 146.70 x 71.50 x 7.65 mm |
|
Вес |
215.00 g | 174.00 g |
|
Диагональ дисплея |
6.00" | 6.10" |
|
Дисплей |
Цветной / IPS TFT 16M цветов 720 x 1440 px (6.00") 268 ppi | Цветной / OLED 16M цветов 60 Hz 1170 x 2532 px (6.10") 457 ppi |
|
Защита дисплея |
Corning Gorilla Glass Buy screen protector | Buy screen protector |
|
Дисплей внешний |
 |  |
|
Дополнительная защита дисплея |
 |  |
|
Макс. время воспроизведения |
nd | Audio: 75 h (3.1 дней) Video: 19 h (0.8 дней) |
|
Стандартная батарея |
Li-Ion 3000 mAhBuy powerbank | Li-Ion 3240 mAhBuy powerbank |
|
Мгновенная зарядка |
USB Power Delivery |  |
|
Беспроводная подзарядка |
 | Qi |
|
Встроенная память |
128 GB | 128 GB, 256 GB, 512 GB |
|
RAM |
4 GB |  |
|
Карты памяти |
 microSD, microSDHC, microSDXC до 2000 GBBuy memory card |  |
|
Операционная система |
Manjaro Android | Apple iOS 15 |
|
процессор |
Rockchip RK3399S | Apple A15 Bionic |
|
Частота |
1500 MHz | 3220 MHz |
|
GPU |
ARM Mali-T860 MP4 | - |
|
Сенсорный экран |
 |  |
|
Две SIM-карты |
 |  |
|
Стандарт SIM-карт |
SingleSIM(microSIM) | DualSIM(eSIM, nanoSIM) |
|
Режим DualSIM |
nd | dual standby |
|
Гибридный Dualsim |
nd |  |
|
В продаже |
 | III. квартал 2021 |
|
Другие названия даного телефона |
- | A2482; A2631; A2633; A2634; A2635 |
|
Стандарт GSM |
850 900 1800 1900 | 850 900 1800 1900 |
|
Стандарт UMTS (3G) |
850 900 1700 1900 2100 | 850 900 1700 1900 2100 |
|
Стандарт LTE |
FDD LTE: 2600, 2100, 1900, 1800, 1700, 900, 850, 800, 700 TDD LTE: 2600, 2500, 2300, 1900 | FDD LTE: 2600, 2300, 2100, 1900, 1800, 1700, 1500, 900, 850, 800, 700, 600 TDD LTE: 5200, 3600, 3500, 2600, 2500, 2300, 2100, 1900 |
|
Стандарт 5G |
 | FDD 5G: 2600, 2100, 1900, 1800, 900, 850, 800, 700 TDD 5G: 4700, 3700, 3500, 2600, 2500, 2300, 1700, 600 |
|
Стандарт CDMA |
 | 850 1900 |
|
Стандарт TD-SCDMA |
 |  |
|
Стандарт UMA |
 |  |
Р Е К Л А М А
Р Е К Л А М А