Comment voulez-vous créer une requête HTTP asynchrone en JAVA?
Je suis assez nouveau à Java, ce qui peut paraître évident pour certains. J'ai beaucoup travaillé avec ActionScript, ce qui est beaucoup basée sur les événements et j'adore ça. Récemment, j'ai essayé d'écrire un petit peu de code Java qui fait une requête POST, mais j'ai été confronté avec le problème qu'il est synchrone demande, de sorte que l'exécution de code attend de la demande est complète, le temps, ou présente une erreur.
Comment puis-je créer une requête asynchrone, où le code continue l'exécution et une fonction de callback est appelé lorsque la requête HTTP est terminée? J'ai jeté un coup d'oeil au fils, mais je pense que c'est exagéré.
- voir aussi bayou async http client
Vous devez vous connecter pour publier un commentaire.
Java est en effet plus bas niveau que ActionScript. C'est comme comparer des pommes avec des oranges. Tout en ActionScript gère tout cela de manière transparente "sous le capot", en Java, vous devez gérer le traitement asynchrone (threading) de vous-même.
Heureusement, en Java, il y a la
java.util.simultanées
API qui peut faire de bien belle manière.Votre problème peut être résolu comme suit:
où
Request
etResponse
se présenter comme suit:et
Voir aussi:
java.util.concurrent
tutoriel.Si vous êtes dans un JEE7 de l'environnement, vous devez avoir une bonne mise en œuvre de JAXRS traîner, ce qui devrait vous permettre de facilement faire des requête HTTP asynchrone à l'aide de son client API.
Ce serait ressemble à ceci:
De sûr, c'est juste à l'aide de contrats à terme. Si vous êtes OK avec l'aide de certains des bibliothèques, vous pouvez prendre un coup d'oeil à RxJava, le code devrait ressembler à:
Et le dernier mais non le moindre, si vous souhaitez réutiliser votre appel asynchrone, vous voudrez peut-être jeter un oeil à Hystrix, qui - en plus d'un bazillion super cool de d'autres choses - permettrait d'écrire quelque chose comme ceci:
Par exemple:
L'appel de cette commande devrait ressembler à:
PS: je sais que le fil est vieux, mais il se sentait mal qu'aucun ne mentionne le Rx/Hystrix façon dans le haut-voté réponses.
Vous pouvez également regarder Async Client Http.
Fondée sur un lien de Apache HTTP Composants sur ce fil, je suis tombé sur la fluidité de la façade de l'API HTTP de Composants. Un exemple il y montre comment configurer une file d'attente de l'asynchrone des requêtes HTTP (et être averti de leur achèvement/échec/annulation). Dans mon cas, je n'ai pas besoin d'une file d'attente, une seule demande asynchrone à un moment.
Voici où j'ai fini (également à l'aide de URIBuilder de HTTP Composants, exemple ici).
Vous pouvez prendre un coup d'oeil à cette question: Asynchrone IO en Java?
Il ressemble à votre meilleur pari, si vous ne voulez pas de se disputer le fils vous-même est un cadre. Le post précédent mentionne
Grizzly, https://grizzly.dev.java.net/, et Netty, http://www.jboss.org/netty/.
De la netty docs:
La Netty projet est un effort pour offrir un événement asynchrone piloté par le réseau de l'application du cadre et des outils pour le développement rapide de maintenable haute performance & de haute évolutivité des serveurs de protocole & les clients.
Apache HttpComponents ont également un async client http désormais trop:
Il doit être clair que le protocole HTTP est synchrone et cela n'a rien à voir avec le langage de programmation. Le Client envoie une demande et obtient une réponse synchrone.
Si vous voulez un comportement asynchrone via le protocole HTTP, ce doit être construit sur HTTP (je ne sais rien à propos d'ActionScript, mais je suppose que c'est ce que l'ActionScript n'trop). Il y a beaucoup de bibliothèques qui pourrait vous donner ce genre de fonctionnalité (par exemple,Maillot de l'ESS). Noter qu'ils ne sont en quelque sorte définir les dépendances entre le client et le serveur comme ils ne ont à s'entendre sur l'exacte non méthode de communication standard au-dessus de HTTP.
Si vous ne pouvez pas contrôler à la fois le client et le serveur ou si vous ne voulez pas avoir des dépendances entre elles, l'approche la plus commune de la mise en œuvre asynchrone (par exemple basée sur les événements) de communication via HTTP est à l'aide de la webhooks approche (vous pouvez vérifier cette pour un exemple d'implémentation en java).
Espère que j'ai aidé!