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";
}
}
}
?>
|
Opiniones de usuarios: 0
|
Opiniones de usuarios: 0
|
|
|
|
|
Tipo |
Táctil | Táctil |
|
Resistencia al agua y al polvo |
IP53 | IP54 |
|
Dimensiones |
165.66 x 75.96 x 7.85 mm | 161.15 x 74.24 x 7.98 mm |
|
Peso |
183.50 g | 187.00 g |
|
Diagonal de la pantalla |
6.67" | 6.67" |
|
Pantalla |
colorida / AMOLED 16M colores 120 Hz 1080 x 2400 px (6.67") 395 ppi | colorida / AMOLED 68,7G colores 120 Hz 1220 x 2712 px (6.67") 446 ppi |
|
Protección de pantalla |
Corning Gorilla Glass Comprar protector de pantalla | Corning Gorilla Glass Comprar protector de pantalla |
|
Pantalla secundaria |
 |  |
|
Protección de pantalla adicional |
 |  |
|
Batería |
Li-Ion 5000 mAhComprar banco de energía | Li-Po 5100 mAhComprar banco de energía |
|
Carga rápida |
 | USB Power Delivery 3.0 |
|
Carga inalámbrica |
 |  |
|
Memoria interna |
64 GB, 128 GB, 256 GB | 128 GB, 256 GB, 512 GB |
|
memoria RAM |
4 GB, 6 GB, 8 GB | 8 GB, 12 GB, 16 GB |
|
Tarjetas de memoria |
 microSD, microSDHC, microSDXC a 1000 GBComprar tarjeta de memoria |  |
|
Sistema operativo |
Android 13 | Android 13 |
|
Interfaz |
MIUI 14 | MIUI 14 |
|
Procesador |
Qualcomm Snapdragon 685 SM6225-AD | Qualcomm Snapdragon 7s Gen 2 SM7435-AB |
|
Frecuencia de reloj |
2800 MHz | 2400 MHz |
|
GPU |
Adreno | Adreno 710 |
|
Pantalla táctil |
 |  |
|
Dos tarjetas SIM (DualSIM) |
 |  |
|
Tipo de tarjetas SIM |
DualSIM(nanoSIM, nanoSIM) | DualSIM(nanoSIM, nanoSIM) |
|
Modo DualSIM |
dual standby | dual standby |
|
Hybrid Dual SIM |
 |  |
|
Comercializado |
I. trimestre 2023 | III. trimestre 2023 |
|
Otros nombres de este móvil |
MZB0DLREU; MZB0DMBEU; MZB0DNWEU; Xiaomi Redmi Note 12 4G | 2312DRA50C; 2312CRAD3C; 2312DRA50G; Xiaomi Redmi Note 13 Pro |
|
Red GSM |
850 900 1800 1900 | 850 900 1800 1900 |
|
Red UMTS (3G) |
850 900 2100 | 850 900 1700 1900 2100 |
|
Estándar LTE |
FDD LTE: 2600, 2100, 1800, 1500, 900, 850, 800, 700 TDD LTE: 2600, 2500, 2300 | FDD LTE: 2100, 1900, 1800, 1700, 900, 850, 800, 700 TDD LTE: 2600, 2500, 2300, 2100, 1900 |
|
Estándar 5G |
 | FDD 5G: 2100, 1800, 900, 850, 700 TDD 5G: 3700, 3500, 2600, 2500 |
|
CDMA |
 |  |
|
Estándar TD-SCDMA |
 |  |
|
UMA |
 |  |
P U B L I C I D A D
|
Primera cámara |
 |  |
|
Tipo de cámara |
Estándar | Estándar |
|
Modelo de sensor de cámara de fotos |
Samsung S5KJN1 | Samsung S5KHP3 |
|
Sensor de imagen |
50 Mpx | 200 Mpx |
|
Tamaño del sensor |
1/2,76 | 1/1,4 |
|
Tamaño de píxel |
0,64 µm | 0,56 µm |
|
Resolución |
8160x6144 px | 16320x12288 px |
|
Zoom óptico |
 |  |
|
Numero de lentes |
5 | 7 |
|
Flash |
LED | LED |
|
Doble flash LED |
 |  |
|
Resolución de video |
1920x1080 px | 3840x2160 px |
|
Formatos de vídeo |
H.264, H.265, MPEG4 | H.264, H.265, MPEG4 - 30 fps |
|
Adicional |
AF, f/1.8 | AF, EIS, OIS, f/1.65 |
|
Segunda cámara |
 |  |
|
Tipo de cámara |
Gran angular | Gran angular |
|
Modelo de sensor de cámara de fotos |
OmniVision OV08D |  |
|
Sensor de imagen |
8 Mpx | 8 Mpx |
|
Tamaño del sensor |
1/4 | 1/4 |
|
Tamaño de píxel |
1,12 µm | 1,12 µm |
|
Resolución |
3264x2448 px | 3264x2448 px |
|
Zoom óptico |
 |  |
|
Numero de lentes |
5 | 5 |
|
Campo de visión |
120 ° | 118 ° |
|
Flash |
LED | LED |
|
Doble flash LED |
 |  |
|
Formatos de vídeo |
H.264, H.265, MPEG4 | H.264, H.265, MPEG4 - 30 fps |
|
Adicional |
FF, f/2.2 | FF, f/2.2 |
|
Tercera cámara |
 |  |
|
Tipo de cámara |
Lente macro | Lente macro |
|
Sensor de imagen |
2 Mpx | 2 Mpx |
|
Tamaño del sensor |
1/5 | 1/5 |
|
Tamaño de píxel |
1,75 µm | 1,75 µm |
|
Resolución |
 | 1600x1200 px |
|
Zoom óptico |
 |  |
|
Numero de lentes |
3 | 3 |
|
Flash |
LED | LED |
|
Doble flash LED |
 |  |
|
Formatos de vídeo |
H.264, H.265, MPEG4 | H.264, H.265, MPEG4 - 30 fps |
|
Adicional |
FF, f/2.4 | FF, f/2.4 |
P U B L I C I D A D