2010-07-09 3 views
0

Je voudrais comprendre comment fonctionne le modèle d'appel asynchrone dans jax ws. Si par exemple j'utilise Future invokeAsync (T msg, gestionnaire AsyncHandler) alors mon programme peut reprendre et quand la réponse du service web arrivera, le résultat sera passé à mon AsyncHandler. Si j'ai plusieurs threads dans le même programme et un thread appelle invokeAsync et reprend l'opération et immédiatement un autre thread (peut-être plus) essaie d'appeler invokeAsync au même service web (opération différente peut-être mais même portType) comment cette situation sera-t-elle gérée? par le cadre? Est-ce qu'une série de POST va le même service web (POST pour thread1, POST pour thread2 etc) ou après qu'une réponse arrive, le POST suivant sera envoyé (POST pour thread1 quand la réponse arrive transmet le résultat au gestionnaire de callback puis POST pour thread2 ?)Invocation asynchrone WS

Merci

Répondre

0

Je ne peux pas dire pour Jax en particulier, mais la seule façon qui fait sens pour moi si les postes sont indépendants. Il serait fou (OMI) pour le client d'attendre que le service Web ait renvoyé la première réponse avant de faire la demande suivante.

+0

Je ne suis pas sûr de ce que vous voulez dire des POST indépendants. Ma compréhension est qu'il existe une connexion TCP unique au même service Web pour tous les threads. Donc n'est-ce pas supposé suivre une série de transactions HTTP? Demande-Réponse, puis demande suivante. Ou suis-je confus à ce sujet? Nous pourrions avoir un POST et ensuite un nouveau POST au même service Web avant que la réponse précédente ne vienne? – akmer

+0

@akmer: Qu'est-ce qui vous fait penser qu'il y aura une seule connexion TCP? Est-ce quelque chose de spécifique à Jax? Il n'y a aucune raison pour que vous ayez une connexion TCP unique. De nombreuses API conserveront un * pool * de connexions et vous permettront de définir une limite raisonnable de connexions simultanées au même serveur, mais il serait inhabituel que cette limite soit de 1. –

+0

@Jon Skeet. Ma compréhension est que dans HTTP1.1 la connexion est conservée et non fermée après la réponse du serveur (par connexion: keep-alive) pour la performance. Donc vous dites que normalement les API auront un peu d'état et comprendront que bien que la requête sera envoyée à la même URL, ne réutilise pas la connexion (en raison de la réponse en attente) mais utilise une connexion disponible groupée? Donc, si j'ai 8 threads l'API va faire 8 connexions TCP pour pousser les demandes au même service web? – akmer