Während des Entwicklungsprozesses von PHP + MySQL kann der lokale Computer beim Eingeben des Hostnamens für die Verbindung zur Datenbank im Allgemeinen localhost oder 127.0.0.1 verwenden. Im eigentlichen Anwendungsprozess wurden jedoch keine Anomalien im Linux-System festgestellt Im Windows-Serversystem gibt es beim Schreiben von localhost eine relativ langsame Reaktion auf eine Seite. Im Allgemeinen dauert es mehr als 1 Sekunde, bis eine Seite fertig ist. Ich habe die Laufzeit des Programms Schritt für Schritt beurteilt und festgestellt, dass dies ein Problem darstellt Beim Herstellen einer Verbindung mit MySQL dauert es fast 1 Sekunde. Wenn es ein Problem gibt, stellen Sie fest, dass diese Situation vorliegt. Der Auszug lautet wie folgt.

HTTP://blog.Sina.com.abilities/是/blog_6cost 5ah 76 Haare 0100 ein Gemälde.HTML

Kürzlich stellte ich fest, dass die Reaktionszeit des Programms etwas langsam war, also habe ich sie nach und nach eliminiert und die Ausführungszeit jedes Programms berechnet. Schließlich stellte ich fest, dass es keine gute Möglichkeit gab, eine Verknüpfung herzustellen die Datenbank, also habe ich es abgelegt.

Am nächsten Tag testete ich die Remote-Verbindung zur Datenbank und stellte fest, dass die Ausführungszeit bei der Verwendung von IP für den Zugriff auf die Datenbank sehr kurz und viel kürzer war als bei der Verwendung von localhost für die lokale Verbindung zur Datenbank. Wir haben also folgenden Test:

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 ;
}


Das Ausgabeergebnis lautet: Der Zeitverlust von localhost beträgt: 0,98833055122226

Der Zeitverlust von 127.0.0.1 beträgt: 0,0039590807522044

 

Der Zeitaufwand der beiden Verbindungsmethoden ist sehr unterschiedlich. Es wäre toll, wenn es Experten gäbe, die bei der Beantwortung dieser Frage helfen könnten.

Ich vermutete, dass es an der DNS-Auflösung liegen könnte oder dass die Localhost-Auflösung Zeit braucht. Bitte erläutern Sie, dass ich ein Fenstersystem verwende.

Erklärung des Grundes:

Es handelt sich tatsächlich um ein Problem beim Parsen des Betriebssystems. Weitere Informationen finden Sie unter http://www.cnblogs.com/hayywcy/p/5341550.html

Beim Zugriff auf localhost ist heute ein seltsames Problem aufgetreten. Es wurde angezeigt, dass 404 nicht gefunden wurde, aber auf 127.0.0.1 zugegriffen werden konnte. Schließlich wurde der Grund gefunden, weil Windows localhost in die IPv6-Adresse::1 statt 127.0.0.1 auflöste. Ich habe die Hosts überprüft und festgestellt, dass IPv6 blockiert wurde. Es gibt auch 127.0.0.1 localhost, aber es kann nicht normal analysiert werden. Baidu hat lange erfolglos gesucht und schließlich mithilfe wissenschaftlicher Internetmethoden eine Lösung bei Google gefunden. Um zu verhindern, dass der ursprüngliche Beitrag verloren geht, habe ich ihn hier erneut veröffentlicht (ursprüngliche Beitragsadresse: http://superuser.com/questions/). 436574/ipv4-vs-ipv6-priority-in-windows-7/436944#436944).

Artikelinhalt:

LÖSUNG Nr. 1: Fügen Sie eine Präfixrichtlinie hinzu, um IPV4-Adressen gegenüber IPV6 zu bevorzugen. Die Präfixrichtlinientabelle ähnelt einer Routingtabelle. Sie bestimmt, welche IP-Adressen beim Herstellen einer Verbindung bevorzugt werden. Beachten Sie, dass eine höhere Priorität in Präfixrichtlinien durch eine größere „Präzedenz“ dargestellt wird. Wert, genau entgegengesetzt zum „Kosten“-Wert der Routing-Tabelle.

Standardmäßige Windows-Präfixrichtlinientabelle:

C:\netsh interface ipv6 show prefixpolicies Aktiver Status wird abgefragt ...

 Precedence  Label  Präfix

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

 50      0  ::1/128

 40      1  ::/0

 30      2  2002::/16

 20      3  ::/96

 10      4  ::ffff:0:0/96

  5      5  2001::/32 Beachten Sie, dass IPv6-Adressen (::/0) gegenüber IPv4-Adressen (::/96, ::ffff:0:0/96) bevorzugt werden. .

 

Wir können eine Richtlinie erstellen, die den IPv6-Tunnel von Hurricane Electric ungünstiger macht als jede IPv4-Adresse:

netsh interface ipv6 add prefixpolicy 2001:470::/32 3 6 2001:470::/32 ist das Präfix von Hurricane Electric, 3 ist eine Präzedenz (sehr niedrig) und 6 ist ein Label.

Ich hätte ein allgemeineres Präfix verwenden können, aber ich wollte sicherstellen, dass, wenn ich eine direkte IPv6-Konnektivität von einem ISP erhalte, diese Vorrang vor IPv4 hat.

Wenn Sie diese Lösung anpassen, müssen Sie ein entsprechendes IPv6-Präfix anstelle meines Hurricane Electric-Präfixes ersetzen.

LÖSUNG Nr. 2: Passen Sie die Registrierung an, damit Windows immer IPV4 gegenüber IPV6 bevorzugt

Diese Lösung ist allgemeiner, aber invasiver und weniger standardkonform. Am Ende wird Windows die Präfix-Richtlinientabelle trotzdem für Sie ändern.

Öffnen Sie RegEdit, navigieren Sie zu HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters. Erstellen Sie den DWORD-Registrierungswert „DisabledComponents“ und legen Sie den Wert auf 20 (Hexadezimal) fest.

Weitere Informationen zu diesem Registrierungsschlüssel finden Sie in Microsoft KB 929852, insbesondere wenn DisabledComponents bereits auf Ihrem System vorhanden ist.

Laut der Übersetzung verfügt Windows über eine Prioritätsanalyseliste. Wenn IPv6 eine höhere Priorität als IPv4 hat, tritt die Situation auf, auf die ich heute gestoßen bin (obwohl der Grund dafür immer noch nicht gefunden wird). Die erste Möglichkeit besteht darin, der Prioritätsanalysetabelle einen Datensatz mit einer höheren IPv4-Priorität als IPv6 hinzuzufügen. Da viele Wörter nicht verstanden werden können und ich Angst vor falschen Parametern habe, wage ich es nicht, sie zu verwenden. Ich habe es mit der zweiten Methode gelöst, nämlich der Änderung der Registrierung. Die Methode ist wie folgt (wenn Sie kein Englisch verstehen, müssen Sie es nicht überprüfen):

Öffnen Sie die Registrierung, suchen Sie den Schlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters und fügen Sie ein Element vom Typ DWORD mit dem Namen DisabledComponents hinzu (falls bereits eines vorhanden ist, müssen Sie es nicht hinzufügen und den Wert direkt ändern). ). Ändern Sie dann den Wert auf 20 und den Werttyp auf Hexadezimal. Das war's, speichern Sie die Registrierung und starten Sie den Computer neu. Versuchen Sie erneut, localhost anzupingen, und versuchen Sie es erneut.


Hinterlasse eine Antwort