2009-05-26 8 views
3

Je maintiens une application J2ME où j'ai trouvé une requête http à http://www.google.com dans l'initialisation de l'application. J'ai demandé au développeur pourquoi il y a une demande pour google. Il a dit que de cette façon, les demandes de l'application seraient plus rapides. J'ai supprimé cette requête sur google.com et les autres demandes ont été plus lentes.Faire une requête http dans J2ME

Quelqu'un peut-il expliquer pourquoi cela est arrivé? Comment puis-je faire l'autre demande plus rapide sans faire de demandes précédentes?

EDIT:

Faire demande à Google dans l'initialisation:

  • première demande (après l'initialisation) = 20sec
  • répéter la première demande = 5sec

Sans faire demande d'initialisation:

  • Première requête = 40sec
  • répéter la première demande = 5sec
+0

toutes les demandes suivantes sont plus lentes? ou juste le premier? –

+0

question éditée avec l'heure approximative de chaque demande –

+0

Pourquoi êtes-vous réellement inquiet de faire la première demande? – KarlP

Répondre

4

Sur un appareil mobile, l'initialisation de la connexion Web prendra du temps et la JVM laissera la connexion ouverte pendant toute la durée du MIDlet (les connexions les plus modernes sont facturées par octet - Edge, GPRS, WiFi). Ainsi, si une connexion est établie sur startApp, la connexion restera ouverte et toute autre communication n'aura pas besoin d'ouvrir une connexion, mais seulement d'envoyer des données. Si vite et plus fiable!

Ce comportement est spécifique à la plate-forme, MIDP2 ne stipule pas que cela soit vrai (donc Nokias peut différer de Samsung, etc.).

La connexion à 127.0.0.1 ne trompera probablement pas la JVM, qui peut décider qu'elle n'a pas besoin d'une connexion GPRS ouverte pour cela. Encore une fois spécifique à la plateforme.

James

+0

L'application utilisera un apn qui n'accède qu'à une adresse spécifique. L'application peut-elle essayer de se connecter à une autre adresse pour laisser la connexion ouverte? –

+0

Le comportement dépendra vraiment de l'implémentation de la pile IP du téléphone. Donc, vous pouvez trouver toutes sortes de bizarreries merveilleuses de l'appareil. Je dirais cependant que si vous essayez de vous connecter à une autre adresse qui est refusée par l'APN, il est juste de supposer que la connexion va se fermer. Comme vous avez le contrôle sur l'APN, pouvez-vous ouvrir une autre adresse "test"? Ou faire une connexion à l'adresse unique disponible? –

2

... peut-être la première demande initialise la couche réseau (*) dans le dispositif et peut-être aussi la machine virtuelle Java.

Je suis sûr que cela fonctionne avec www.microsoft.com trop :-)

*) Je soupçonne que cela dépend de l'appareil que vous utilisez sur. Je n'ai aucune idée de ce qui se passe, mais il pourrait y avoir quelque chose. Par exemple: Démarrage de l'appareil radio, configuration d'une session avec l'opérateur réseau, chargement et démarrage de classes dans jvm. Essayez de vous connecter à 127.0.0.1 à la place de google et de voir si cela rend les tentatives plus tardives plus rapides.

Si l'application effectue un grand nombre d'initialisations qui prend un moment avant d'effectuer la première tentative de connexion réelle, vous pouvez démarrer un nouveau thread plus tôt qu'une tentative de connexion. Peut-être que cela réduira le temps d'attente total.

+0

si c'est le cas, cela fonctionnerait-il pour faire une demande à 127.0.0.1? –

+0

quelle est la pile nette? comment initialiser cela sans faire une demande? –

+0

Ce que je voulais dire, c'était tout ce qui devait fonctionner pour envoyer vos documents au receveur. – KarlP

Questions connexes