Comment augmenter les pages vues à l'aide des fils de discussion et de httpclient

小云云
Libérer: 2023-03-20 18:26:02
original
1835 Les gens l'ont consulté

Je pense juste à une demande ici. Je vérifie la demande une fois et le nombre de vues augmente de 1. J'ai donc appuyé sur F5 pour actualiser, mais en fait, cela n'a pas augmenté à chaque fois. J'ai continué à vérifier et j'ai découvert que cela augmenterait de 1 si j'appuyais à nouveau sur F5. Maintenant que l’analyse des fonctionnalités de base est terminée, mon cher, avez-vous des idées ? Je pense ici aux robots d'exploration précédents, qui demandent simplement la page, récupèrent le code HTML renvoyé, puis analysent la chaîne. J'ai donc également appris de cette idée et j'ai utilisé le serveur pour demander le lien, et le reste est le temps d'attente. Si je continue à naviguer malgré tout, il peut y avoir des soupçons de demandes malveillantes et mon compte sera banni. Alors, quelle technologie est adaptée à ce scénario ? Oui, vous pouvez utiliser des threads pour définir le temps de veille après chaque requête.

L'idée générale est claire : httpClient envoie une requête et le thread contrôle le temps de pause. Sans plus tarder, permettez-moi d'entrer dans le code :

Tout le monde devrait être familier avec le principal ci-dessus. Mon idée ici est qu'il y a trois variables dans la classe thread Before. J'utilise , je définis les variables en premier après la sortie de new, afin qu'elles puissent être utilisées plus tard dans la méthode d'exécution du thread. Ici, je voudrais ajouter 4 façons d'implémenter le multi-threading. Cela semble avoir déjà été mentionné dans un article de blog.

Il existe 4 façons d'implémenter le multi-threading, dont la plupart sont les deux premières sans valeurs de retour.

1. Héritez de la classe Thread pour créer un thread

La classe Thread est essentiellement une instance qui implémente l'interface Runnable et représente une instance d'un thread. La seule façon de démarrer un thread consiste à utiliser la méthode d’instance start() de la classe Thread. La méthode start() est une méthode native qui démarrera un nouveau thread et exécutera la méthode run(). Il est très simple d'implémenter le multithreading de cette manière. En étendant directement Thread via votre propre classe et en remplaçant la méthode run(), vous pouvez démarrer un nouveau thread et exécuter votre propre méthode run() définie. Par exemple :

public class MyThread extends Thread { public void run() { System.out.println("MyThread.run()" } } MyThread myThread1 = new MyThread myThread2 = new MyThread (); myThread1.start(); myThread2.start();

2. Implémentez l'interface Runnable pour créer un fil

Si votre classe étend déjà une autre classe, vous ne pouvez pas l'étendre directement. Thread À l'heure actuelle, une interface Runnable peut être implémentée, comme suit :

classe publique MyThread extends OtherClass implémente Runnable {  public void run() {  System.out.println("MyThread.run() ");  } }

Pour démarrer MyThread, vous devez d'abord instancier un Thread et transmettre votre propre instance MyThread :

MyThread myThread = new MyThread(); Thread thread = new Thread(myThread); thread.start( );

En fait, lorsqu'un paramètre cible Runnable est passé à Thread, la méthode run() de Thread appellera target.run(), reportez-vous au code source du JDK :

public void run() { if (target != null) { target.run(); } }

3. Implémentez l'interface Callable pour créer des threads Thread via le wrapper FutureTask

L'interface appelable (également uniquement la méthode A) est définie comme suit :

interface publique Callable { V call() throws Exception }

public class SomeCallable ; extends OtherClass Implements Callable { @Override public V call() throws Exception { // TODO Le stub de méthode généré automatiquement renvoie null; ); //Créer une FutureTask< à partir de Callable Objet : FutureTask ;Integer>. Il implémente les interfaces Future et Runnable. //Créez un objet Thread à partir de FutureTask : Thread oneThread = new Thread(oneTask); oneThread.start(); //À ce stade, un thread est créé.

4. Utilisez ExecutorService, Callable et Future pour implémenter des threads qui renvoient des résultats

Les trois interfaces d'ExecutorService, Callable et Future appartiennent en fait au framework Executor. Le thread qui renvoie le résultat est une nouvelle fonctionnalité introduite dans JDK1.5. Avec cette fonctionnalité, vous n'avez plus besoin de vous donner beaucoup de mal pour obtenir la valeur de retour. Et même si vous le mettez en œuvre vous-même, il peut être plein de lacunes.

Les tâches qui peuvent renvoyer des valeurs doivent implémenter l'interface Callable. De même, les tâches qui ne renvoient pas de valeur doivent implémenter l'interface Runnable.

Après avoir exécuté la tâche Callable, vous pouvez obtenir un objet Future En appelant get sur l'objet, vous pouvez obtenir l'Objet renvoyé par la tâche Callable.

Remarque : la méthode get est bloquante, c'est-à-dire : le thread ne renvoie aucun résultat et la méthode get attendra indéfiniment.

Combiné avec l'interface de pool de threads ExecutorService, vous pouvez réaliser le légendaire multi-threading qui renvoie des résultats.

Pour revenir au sujet, j'utilise ici le premier car je n'ai pas besoin de renvoyer de valeur.


Ajoutée ici l'idée de brosser plusieurs adresses, ainsi que la méthode de requête impaire-pair pour éviter d'utiliser la même méthode de requête à chaque fois et éviter être bloqué par le système. Répertorié comme un risque de requêtes malveillantes. Et le temps de sommeil peut être réglé en mode principal. Jetons un coup d'œil au volume de lecture avant l'actualisation :


Je me suis couché après avoir écrit ceci hier soir, et l'ordinateur n'a pas été éteint. regardez ceci Combien de demandes ont été reçues dans la soirée :


Ensuite, j'actualise la page de liste ci-dessous et regarde à nouveau le volume de lecture :


Avez-vous vu que le nombre de lectures est désormais supérieur à 600, contre un peu plus de 300 auparavant.

Parce que l'IP a toujours été celle-ci, le temps de sommeil au milieu est un peu long. S'il y a une IP pour la commutation et qu'une logique de commutation est ajoutée, l'effet sera meilleur.

Théoriquement parlant, toutes les lectures peuvent être augmentées par cette méthode, bien sûr, à condition que le client ne mette pas en œuvre des stratégies strictes telles que demander plusieurs fois la même IP pour compter comme une lecture. Je ne sais pas comment qualifier ces articles de Baidu Wenku d'excellents documents, mais je pense que cela doit avoir quelque chose à voir avec le nombre de demandes. Si vous en avez l'occasion, vous pouvez essayer cette idée. Vous pouvez le modifier pour créer deux fils de discussion et les alterner, un fil brosse un site Web, haha.
Mais ne me blâmez pas si votre compte est banni, haha.

Recommandations associées :

Utilisation de thinkPHP+ajax pour implémenter des vues statistiques de page pv

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal