Lors du développement de tâches de robottes chronométrées, le contrôle de la fréquence des demandes est une tâche cruciale. Une fréquence de demande excessive peut entraîner le serveur cible de bloquer la propriété intellectuelle, et une fréquence excessivement basse peut affecter l'efficacité de rampe de données. Dans PHP, Time_nanosleep est une fonction très pratique qui nous aide à contrôler plus précisément l'intervalle de robotage, en particulier pour atteindre le contrôle du sommeil de haute précision au niveau de la milliseconde.
PHP fournit plusieurs fonctions de retard, telles que Sleep () et Usleep () . Les retards de sommeil () en secondes, ont une faible précision et conviennent à certains scénarios non procédés; Bien que Usleep () prenne en charge le niveau de microseconde (un millionième de seconde), il est facilement affecté par la planification du système et biaisé lorsqu'il est demandé à haute fréquence. Time_nanosleep soutient le contrôle de la nanoseconde, avec une précision et une flexibilité plus fortes:
bool time_nanosleep ( int $seconds , int $nanoseconds )
Cette fonction prend deux paramètres: les secondes et les nanosecondes, permettant aux développeurs d'atteindre avec précision un milliardième de seconde pour contrôler les retards, ce qui est idéal pour les scripts de chenilles qui nécessitent des intervalles de demande de réglage fin.
Supposons que nous voulions régulièrement ramper les données de https://gitbox.net/data-feed . Afin de ne pas exercer une pression sur le serveur, nous définissons l'intervalle de chaque demande de 300 millisecondes (c'est-à-dire 0,3 seconde). Nous pouvons faire ceci:
<?php
$targetUrl = "https://gitbox.net/data-feed";
$maxRequests = 10;
for ($i = 0; $i < $maxRequests; $i++) {
$response = file_get_contents($targetUrl);
if ($response === false) {
echo "1 et 1 {$i} La demande a échoué\n";
} else {
echo "1 et 1 {$i} La demande a réussi,Durée du contenu:" . strlen($response) . "\n";
}
// Dormir après chaque demande 300 millisecondes(0.3 Deuxième)
$seconds = 0;
$nanoseconds = 300 * 1000000; // 300 millisecondes = 300,000,000 纳Deuxième
time_nanosleep($seconds, $nanoseconds);
}
Dans ce script, nous avons utilisé File_get_contents pour simplement saisir des données à partir de https://gitbox.net/data-feed et utilisé Time_nanosleep (0, 30000000) pour assurer un retard exact de 300 millisecondes entre chaque demande.
Time_nanosleep revient fidèle à indiquer le succès; Si le retard est interrompu, il renvoie un tableau comprenant le temps restant des secondes et des nanosecondes . Nous pouvons effectuer des erreurs ou réessayer la logique si nécessaire:
$result = time_nanosleep(0, 300000000);
if (is_array($result)) {
echo "Retard interrompu,temps restant:{$result['seconds']} Deuxième,{$result['nanoseconds']} 纳Deuxième\n";
}
Évitez d'être bloqué : Utilisez Time_nanosleep pour contrôler la fréquence et simuler l'accès du navigateur avec l'agent utilisateur , ce qui contribue à réduire le risque d'être identifié comme un robot par le serveur cible.
Contrôle d'intervalle dynamique : vous pouvez ajuster dynamiquement les paramètres Time_nanosleep en fonction du temps de réponse du site Web ou de la charge du serveur pour améliorer l'efficacité et la stabilité du robot.
Utilisez Curl au lieu de File_get_Contents : Dans les projets réels, Curl fournit des capacités de gestion des erreurs, de délai d'expiration et de configuration de demande, et il est recommandé de l'utiliser en premier.
Une utilisation raisonnable de Time_nanosleep dans les robots PHP peut améliorer considérablement la stabilité et la précision du processus de rampe. Surtout dans les scénarios où la fréquence de demande de contrôle de niveau des millisecondes est requise, elle peut devenir un outil puissant dans votre stratégie de planification. En combinant un bon mécanisme de gestion des erreurs et une stratégie d'accès, nous pouvons construire un système de robotage efficace plus robuste.