HTTP asynchrone Client Java
Comme un débutant dans le monde Java, je viens de trouver beaucoup de choses très obtus à accomplir qui sont relativement trivial dans de nombreux autres cadres. Un exemple principal est une solution simple pour asynchrone des requêtes http. Voyant que l'un ne semble pas exister déjà, quelle est la meilleure approche? La création de mon propre fils à l'aide d'un blocage de type lib comme httpclient ou intégré dans java http trucs, ou dois-je utiliser les nouvelles de la non-bloquant io nouveautés de java -, il semble particulièrement complexe pour quelque chose qui devrait être simple.
Ce que je cherche, c'est quelque chose de facile à utiliser à partir d'un développeur point de vue - quelque chose de similaire à URLLoader en AS3 - où il vous suffit de créer un URLRequest - joindre un groupe de gestionnaires d'événements pour gérer la fin, les erreurs, le progrès, etc, et appeler une méthode pour déclencher.
Si vous n'êtes pas familier avec URLLoader en AS3, c'est tellement super facile et ressemble à quelque chose comme ceci:
private void getURL(String url)
{
URLLoader loader = new URLLoader();
loader.addEventListener(Event.Complete, completeHandler);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
URLRequest request = new URLRequest(url);
//fire it off - this is asynchronous so we handle
//completion with event handlers
loader.load(request);
}
private void completeHandler(Event event)
{
URLLoader loader = (URLLoader)event.target;
Object results = loader.data;
//process results
}
private void httpStatusHandler(Event event)
{
//check status code
}
private void ioErrorHandler(Event event)
{
//handle errors
}
Vous devez vous connecter pour publier un commentaire.
Utiliser le "Async Http Client" anciennement appelé ning http bibliothèque client.
Voir
http://code.ning.com/2010/03/introducing-nings-asynchronous-http-client-library/
Maintenant Disponible sur GitHub
https://github.com/ning/async-http-client
La Version 4.0 de Apache Commons HttpClient (maintenant dans HttpComponents/HttpCore) également en charge Java NIO (non-bloquant IO). Je pense que c'est votre meilleur pari.
Si vous n'avez pas regardé déjà, découvrez le Java 5 java.util.concurrent -- il fait du multi-thread applications beaucoup plus facile à développer. Vous pouvez configurer un ThreadPoolExecutor qui gère, disons, quatre Fils. Ensuite, vous nourrir de la piscine n'importe quel nombre de tâches à réaliser. Chaque tâche est un Exécutable. Le ThreadPoolExecutor seront en file d'attente des tâches Exécutables et de les nourrir à la disposition de Threads en parallèle. La Piscine afterExecute() la méthode est appelée lors de chaque Exécutable fin de la tâche.
Je me souviens d'avoir écrit une extraction de pool de threads pour un navigateur web écrit en Java en 1999, et il a été un ours pour obtenir le droit. Le mois dernier, j'ai écrit un testeur de charge pour un serveur web. Le testeur a un ThreadPoolExecutor qui a n threads, et les tâches Exécutables je le nourrir chaque récupération d'une page à l'aide de Client HTTP Apache. Il a suffit d'une heure ou deux pour qu'il fonctionne raisonnablement bien. Je pense que vous serez comme java.util.simultanées couplé avec Apache HTTP Client, même si il semble que vous aurez besoin de faire un peu de personnalisation pour le progrès de l'indication.
(Notez que Client HTTP Apache fait de son propre thread de mise en commun et la configuration par défaut vous limite à 20 fils max, et seulement deux pour chaque serveur web.)
Mise à jour: Voici le lien pour Client HTTP Apache. Assurez-vous de lire sur MultiThreadedHttpConnectionManager, c'est ce qui gère la connexion de la piscine, et il n'est pas indiqué dans l'exemple le plus simple.
Dirait que vous voulez (une partie de) NIO, il y a un bon tutoriel ici, le réseau asynchrone commence à p. 30 et il y a de nombreux liens utiles à la fin.
La La jetée de client HTTP est asynchrone.
il y a des bibliothèques et frameworks écrit sur le dessus de NIO/Netty - RxNetty et Vertx qui peut être utile à d'écriture asynchrone client HTTP
Ci-dessous est un exemple de code utilisant vertx
vous pouvez trouver le soufflé un exemple de code à partir de ici
Donc, il est probablement intéressant de noter que actionscript et Java n'a pas de serveur le même créneau. Par exemple, Java permet de faire des choses en plus fastidieux - mais généralement c'est pour donner à l'utilisateur plus d'options dans la manière, par exemple, une connexion HTTP est exécutée, alors que actionscript pourrait détails abstraits ou des erreurs à l'écart pour la facilité d'utilisation. Mais, quant à votre question est toujours debout.
Je suis moi-même pas au courant d'un asynchrone client HTTP pour Java. Alex Martelli réponse parle de Java NIO, ce qui est une bonne réponse si vous êtes intéressé dans la mise en œuvre du protocole HTTP dans votre propre code. NIO vous permettra d'utiliser les sockets pour se connecter au serveur web - mais alors, vous devez créer manuellement vos propres requêtes GET et d'analyser les en-têtes HTTP entrants/données.
Une autre option est d'utiliser le java.net.URL classes - et vous pouvez trouver de nombreux tutoriels pour ceux en ligne et sur stackoverflow. Vous pouvez placer des personnes dans des fils - de sorte que votre programme java a plusieurs threads d'exécution.
Mais puis que vous exécutez sur le problème de la synchronisation. Ce qui j'en conviens, est une douleur, mais il offre un niveau plus granulaire de la flexibilité.
(Je me rends compte que ce n'est pas la réponse à votre question - et si quelqu'un sait réellement d'une installation de java pour faire asynchrone des requêtes http, je serais intéressé de savoir!!!)
Autant que je sache, le TCPMon outil prend une approche similaire à ce que vous décrivez. Vous pouvez prendre un coup d'oeil au code source dans leur SVN navigateur
Également jeter un oeil à WGET-java pour le cran de blocage de code.
Mais avez-vous écrire cela en Java? Il ya beaucoup d'autres approches à l'aide de JRuby ou Rhino pour accomplir quelque chose comme ceci facilement, qui sera exécuté sur la JVM, mais ne sont pas écrits en Java.
httpunit et interface htmlunit sont 2 personnalisable et configurable Java les clients http capable de quelque chose d'un navigateur tel que simuler firefox, sans tête, de navigation, de logiciels planifié les clients et les agents.
Jetez également un coup d'oeil dans http://www.javaworld.com/javaworld/jw-03-2008/jw-03-asynchhttp.html
Cet article décrit async HTTP basée sur une HttpClient nommé xLightweb
Je vous recommande de tir threads séparés pour que.
Je viens de tombé sur le HTTP asynchrone client en œuvre au sein de Geronimo. Vous pouvez également prendre un coup d'oeil, à http://svn.apache.org/viewvc/geronimo/sandbox/AsyncHttpClient/ - mise en garde: le dernier commit semble de plus d'un an.
Un autre projet de construction d'un asynchrone client HTTP est xsocket: xsocket.sourceforge.net
Asyncweb fournit un http asynchrone client avec son serveur http. Disponible pour téléchargement à partir de l'emplacement suivant:
https://svn.apache.org/repos/asf/mina/asyncweb/trunk