Pendant le processus de développement de php+mysql, lors du remplissage du nom d'hôte pour la connexion à la base de données, la machine locale peut généralement utiliser localhost ou 127.0.0.1. Dans le processus de candidature réel, aucune anomalie n'a été trouvée dans le système Linux, mais dans le système serveur Windows, il y a Lors de l'écriture de localhost, la réponse de la page Web sera relativement lente. Généralement, il faut plus d'une seconde pour terminer une page. J'ai évalué le temps d'exécution du programme étape par étape et j'ai découvert qu'il s'agissait d'un problème. lors de la connexion à MySQL, il faut près d'une seconde pour établir une connexion. S'il y a un problème, recherchez-le et constatez que cette situation existe. L'extrait est le suivant :

HTTP://blog.Sina.com.abilities/是/blog_6cost 5ah 76 cheveux 0100 une peinture.HTML

Récemment, j'ai trouvé que le temps de réponse du programme était un peu lent, alors je l'ai progressivement éliminé et j'ai calculé le temps d'exécution de chaque programme. Finalement, j'ai trouvé qu'il n'y avait pas de bon moyen de créer des liens avec la base de données. lier la base de données, alors je l'ai déposé.

Le lendemain, j'ai testé le lien distant vers la base de données et j'ai constaté que le temps d'exécution de l'utilisation d'IP pour accéder à la base de données était très court et beaucoup plus court que lorsque j'utilisais localhost pour me connecter localement à la base de données. On a donc le test suivant :

set_time_limit(0) ;
$localtime = 0 ;
for($i=1;$i<=50;$i++){
 $btime = get_microtime() ;   
 $conn = new mysqli("localhost","root","admin","") ;
 $conn-close() ;
 $etime = get_microtime() ;
 $localtime += $etime-$btime ;
}
$iptime =0 ;
for($i=1;$i<=50;$i++){
 $btime = get_microtime() ;   
 $conn = new mysqli("127.0.0.1","root","admin","") ;
 $conn-close() ;
 $etime = get_microtime() ;
 $iptime += $etime-$btime ;
}
echo "localhost时间损耗为:".($localtime)/$i."<br /" ;
echo "127.0.0.1时间损耗为:".($iptime/$i)."<br /" ;
function get_microtime(){
 list($micro,$time) = explode(" ",microtime());
 return $time+$micro ;
}


Le résultat de sortie est : la perte de temps localhost est : 0,98833055122226

La perte de temps de 127.0.0.1 est : 0,0039590807522044

 

La consommation de temps des deux méthodes de connexion est très différente. Ce serait formidable si un expert pouvait aider à répondre à cette question.

J'ai deviné que cela pourrait être dû à la résolution DNS ou au fait que la résolution de l'hôte local prend du temps. Veuillez expliquer que j'utilise un système de fenêtres.

Explication de la raison :

Il s'agit en effet d'un problème d'analyse du système d'exploitation. Pour plus de détails, veuillez vous référer à http://www.cnblogs.com/hayywcy/p/5341550.html.

J'ai rencontré un problème étrange aujourd'hui lors de l'accès à localhost, il m'a demandé de ne pas trouver 404, mais 127.0.0.1 était accessible. Finalement, la raison a été trouvée car Windows a résolu localhost en adresse ipv6 ::1 au lieu de 127.0.0.1. J'ai vérifié les hôtes et découvert qu'ipv6 avait été bloqué. Il existe également 127.0.0.1 localhost, mais il ne peut pas être résolu normalement. Baidu a cherché longtemps en vain et a finalement trouvé une solution sur Google en utilisant des méthodes scientifiques sur Internet. Pour éviter que le message original ne soit perdu, je l'ai republié ici (adresse du message original : http://superuser.com/questions/. 436574/ipv4-vs-ipv6-priorité-dans-windows-7/436944#436944).

Contenu de l'article :

SOLUTION N°1 : AJOUTER UNE POLITIQUE DE PRÉFIXE POUR PRÉFÉRER LES ADRESSES IPV4 SUR IPV6 La table de politique de préfixe est similaire à une table de routage, elle détermine quelles adresses IP sont préférées lors de l'établissement d'une connexion. Notez qu'une priorité plus élevée dans les politiques de préfixe est représentée par une « priorité » plus grande. valeur, exactement opposée à la valeur "coût" de la table de routage.

Table de stratégie de préfixe Windows par défaut :

C:\netsh interface ipv6 show prefixpolicies Interrogation de l'état actif...

 Précédent  Étiquette  Préfixe

 ----------  -----  -------------------------- ---

 50      0  ::1/128

 40      1  ::/0

 30      2  2002::/16

 20      3  ::/96

 10      4  ::ffff:0:0/96

  5      5  2001::/32 Notez que les adresses IPv6 (::/0) sont préférées aux adresses IPv4 (::/96, ::ffff:0:0/96) .

 

Nous pouvons créer une politique qui rendra le tunnel IPv6 de Hurricane Electric moins favorable que n'importe quelle adresse IPv4 :

netsh interface ipv6 add prefixpolicy 2001:470::/32 3 6 2001:470::/32 est le préfixe de Hurricane Electric, 3 est une priorité (très faible) et 6 est une étiquette.

J'aurais pu utiliser un préfixe plus générique, mais je voulais m'assurer que si et quand j'obtiendrais une connectivité IPv6 directe d'un FAI, elle aurait priorité sur IPv4.

Si vous adaptez cette solution, vous devez remplacer un préfixe IPv6 approprié au lieu de mon préfixe Hurricane Electric.

SOLUTION N°2 : AJUSTER LE REGISTRE POUR QUE WINDOWS PRÉFÈRE TOUJOURS IPV4 À IPV6

Cette solution est plus générique, mais plus invasive et moins conforme aux standards. Au final, Windows modifiera quand même la table de stratégie de préfixe pour vous.

Ouvrez RegEdit, accédez à HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters Create DisabledComponents DWORD valeur de registre, définissez sa valeur sur 20 (hexadécimal).

Consultez Microsoft KB 929852 pour plus d’informations sur cette clé de registre, en particulier si DisabledComponents existe déjà sur votre système.

Selon la traduction, Windows a une liste d'analyse prioritaire. Lorsque ipv6 a une priorité plus élevée que ipv4, la situation que j'ai rencontrée aujourd'hui se produira (même si la raison n'est toujours pas trouvée). La première façon consiste à ajouter un enregistrement avec une priorité ipv4 supérieure à ipv6 à la table d'analyse des priorités. Parce que de nombreux mots ne peuvent pas être compris et que j'ai peur de me tromper de paramètres, je n'ose pas l'utiliser. Je l'ai résolu avec la deuxième méthode, qui consiste à modifier le registre. La méthode est la suivante (si vous ne comprenez pas l'anglais, vous n'avez pas besoin de le vérifier) :

Ouvrez le registre, recherchez la clé HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters et ajoutez un élément de type DWORD avec le nom DisabledComponents (si vous en avez déjà un, vous n'avez pas besoin de l'ajouter et de modifier directement la valeur ). Modifiez ensuite la valeur en 20 et le type de valeur en hexadécimal. Voilà, enregistrez le registre et redémarrez l'ordinateur. Essayez à nouveau d'envoyer une requête ping à localhost et essayez.


Laisser une réponse