Ich denke hier nur an eine Anfrage. Ich verifiziere die Anfrage einmal und die Anzahl der Aufrufe erhöht sich um 1. Also habe ich zum Aktualisieren F5 gedrückt, aber tatsächlich hat sich der Wert nicht jedes Mal erhöht. Ich habe die Überprüfung fortgesetzt und festgestellt, dass er sich um 1 erhöhen würde, wenn ich erneut F5 drücken würde. Nachdem die grundlegende Funktionsanalyse nun abgeschlossen ist, haben Sie, meine Liebe, irgendwelche Ideen? Ich denke hier an die vorherigen Crawler, die einfach die Seite anfordern, den zurückgegebenen HTML-Code abrufen und dann den String analysieren. Also habe ich auch aus dieser Idee gelernt und den Server verwendet, um den Link anzufordern, und der Rest ist die Wartezeit. Wenn ich trotzdem weitersurfe, besteht möglicherweise der Verdacht auf böswillige Anfragen und mein Konto wird gesperrt. Welche Technologie ist für dieses Szenario geeignet? Haben Sie darüber nachgedacht? Ja, Sie können Threads verwenden, um die Ruhezeit nach jeder Anfrage festzulegen.
Die Grundidee ist klar: httpClient sendet eine Anfrage und der Thread steuert die Pausenzeit. Lassen Sie mich ohne weiteres auf den Code eingehen:
Meine Idee hier ist, dass es in der Thread-Klasse drei Variablen gibt Ich verwende , setze die Variablen zuerst, nachdem new herauskommt, damit sie später in der Thread-Run-Methode verwendet werden können. Hier möchte ich 4 Möglichkeiten zur Implementierung von Multithreading hinzufügen. Dies wurde anscheinend bereits in einem Blogbeitrag erwähnt.
Es gibt vier Möglichkeiten, Multithreading zu implementieren, die meisten davon sind die ersten beiden ohne Rückgabewerte.
1. Erben Sie die Thread-Klasse, um einen Thread zu erstellen
Die Thread-Klasse ist im Wesentlichen eine Instanz, die die Runnable-Schnittstelle implementiert und eine Instanz eines Threads darstellt. Die einzige Möglichkeit, einen Thread zu starten, ist die start()-Instanzmethode der Thread-Klasse. Die start()-Methode ist eine native Methode, die einen neuen Thread startet und die run()-Methode ausführt. Es ist sehr einfach, Multithreading auf diese Weise zu implementieren, indem Sie Thread direkt durch Ihre eigene Klasse erweitern und die run()-Methode überschreiben. Sie können einen neuen Thread starten und Ihre eigene definierte run()-Methode ausführen. Zum Beispiel:
public class MyThread erweitert Thread { public void run() { System.out.println("MyThread.run()"); } } MyThread myThread1 = new MyThread(); MyThread (); myThread2.start();
2. Implementieren Sie die Runnable-Schnittstelle, um einen Thread zu erstellen.
Wenn Ihre Klasse bereits eine andere Klasse erweitert Thread. Zu diesem Zeitpunkt kann eine Runnable-Schnittstelle wie folgt implementiert werden:
öffentliche Klasse MyThread erweitert OtherClass implementiert Runnable { public void run() { System.out.println("MyThread.run() "); } }
Um MyThread zu starten, müssen Sie zuerst einen Thread instanziieren und Ihre eigene MyThread-Instanz übergeben:
MyThread myThread = new MyThread(); Thread thread = new Thread(myThread); thread.start( );
Wenn ein Runnable-Zielparameter an Thread übergeben wird, ruft die run()-Methode von Thread target.run() auf und verweist auf den JDK-Quellcode :
public void run() { if (target != null) { target.run(); }
3. Implementieren Sie die Callable-Schnittstelle, um Thread-Threads über den FutureTask-Wrapper zu erstellen 🎜>
Aufrufbare Schnittstelle (auch nur A-Methode) ist wie folgt definiert: öffentliche Schnittstelle CallableUm auf den Punkt zurückzukommen: Ich verwende hier die erste, da ich keinen Wert zurückgeben muss.
Hier wurde die Idee hinzugefügt, mehrere Adressen zu bürsten, sowie die ungerade-gerade-Anfragemethode, um zu vermeiden, jedes Mal dieselbe Anfragemethode zu verwenden und zu vermeiden Wird vom System als Risiko für böswillige Anfragen aufgeführt. Und die Schlafzeit kann im Hauptmenü eingestellt werden. Werfen wir einen Blick auf den Leseumfang vor der Aktualisierung:
Ich habe das gestern Abend fertig geschrieben und bin zu Bett gegangen, ohne den Computer auszuschalten. Schauen Sie sich das an So viele Anfragen sind am Abend eingegangen:
Dann aktualisiere ich die Listenseite unten und schaue mir noch einmal den Leseband an:
Haben Sie gesehen, dass die Anzahl der Lesevorgänge jetzt bei über 600 liegt, verglichen mit knapp über 300 zuvor?
Da die IP schon immer diese war, ist die Ruhezeit in der Mitte etwas lang. Wenn eine IP zum Umschalten vorhanden ist und eine Umschaltlogik hinzugefügt wird, ist der Effekt besser.
Theoretisch können mit dieser Methode natürlich alle Messwerte erhöht werden, vorausgesetzt, dass der Client keine strengen Strategien anwendet, wie beispielsweise die mehrfache Anforderung derselben IP, um als ein Messwert zu zählen. Ich kann nicht herausfinden, wie ich diese Artikel in Baidu Wenku als hervorragende Dokumente bewerten soll, aber ich denke, es muss etwas mit der Anzahl der Anfragen zu tun haben. Wenn Sie die Möglichkeit haben, können Sie diese Idee ausprobieren. Sie können es ändern, um zwei Threads zu erstellen und diese abzuwechseln. Ein Thread bürstet eine Website, haha.
Aber gib mir nicht die Schuld, wenn dein Konto gesperrt wird, haha.
Verwandte Empfehlungen:
Verwendung von thinkPHP+ajax zur Implementierung statistischer Seiten-PV-Aufrufe
Das obige ist der detaillierte Inhalt vonSo erhöhen Sie Seitenaufrufe mithilfe von Threads und httpclient. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!