So erhöhen Sie Seitenaufrufe mithilfe von Threads und httpclient

小云云
Freigeben: 2023-03-20 18:26:02
Original
1827 Leute haben es durchsucht

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 Callable { V call() throws Exception; ; erweitert OtherClass implementiert Callable ); //Erstellen Sie ein FutureTask-Objekt: FutureTask(oneCallable); //Hinweis: FutureTask ;Integer>. Es implementiert sowohl die Future- als auch die Runnable-Schnittstelle. //Erstelle ein Thread-Objekt aus FutureTask: Thread oneThread = new Thread(oneTask); //An diesem Punkt wird ein Thread erstellt.

4. Verwenden Sie ExecutorService, Callable und Future, um Threads zu implementieren, die Ergebnisse zurückgeben

Die drei Schnittstellen ExecutorService, Callable und Future gehören tatsächlich zum Executor-Framework. Der Thread, der das Ergebnis zurückgibt, ist eine neue Funktion, die in JDK1.5 eingeführt wurde. Mit dieser Funktion müssen Sie sich nicht mehr viel Mühe geben, um den Rückgabewert zu erhalten. Und selbst wenn Sie es selbst implementieren, kann es voller Lücken sein.

Aufgaben, die Werte zurückgeben können, müssen die Callable-Schnittstelle implementieren. Ebenso müssen Aufgaben, die keinen Wert zurückgeben, die Runnable-Schnittstelle implementieren.

Nachdem Sie die Callable-Aufgabe ausgeführt haben, können Sie ein Future-Objekt abrufen. Durch Aufrufen von get für das Objekt können Sie das von der Callable-Aufgabe zurückgegebene Objekt abrufen.

Hinweis: Die get-Methode blockiert, das heißt: Der Thread gibt kein Ergebnis zurück und die get-Methode wartet ewig.

In Kombination mit der Thread-Pool-Schnittstelle ExecutorService können Sie das legendäre Multithreading realisieren, das Ergebnisse zurückgibt.

Um 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage