Les requêtes HTTP avec HttpClient trop lent?
je suis en train de codage d'une application android qui envoient des valeurs d'un fichier php hébergé sur un serveur dédier et stocker le tableau resoult
le code est ce
HttpPost httppost;
DefaultHttpClient httpclient;
httppost = new HttpPost("http://IP/script.php");
HttpParams param = new BasicHttpParams();
param.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
// httppost.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false);
HttpProtocolParams.setContentCharset(param, "UTF-8");
httpclient = new DefaultHttpClient(param);
ResponseHandler <String> res=new BasicResponseHandler();
List<NameValuePair> nameValuePairs;
nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("id","1"));
nameValuePairs.add(new BasicNameValuePair("api", "1"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Log.v("1",System.currentTimeMillis()+"");//Log to know the time diff
String result= httpclient.execute(httppost, res);
Log.v("2",System.currentTimeMillis()+""); // Log to know the time diff
ce code de déchets d'environ 2,5 secondes (en 3G ou WiFi) pour envoyer le post et get juste "ok" de la chaîne de serveur , même avec un bon wifi cette fois en baisse de seulement 2,2 /2.0 secondes
J'ai couru un simple Ajax sendpost script dans mon ordinateur connecté à internet par le biais du téléphone et de la 3G, c'est prendre sur .300ms à faire le même genre de chose ¿une Même connexion, même action, 2 secondes de différence ?
///***Mise à JOUR
J'ai essayé de nouveau mon script jquery sur mon ordinateur (avec un mobile 3G+/HDSPA conection)
le temps moyen de réponse est d'environ 250ms mais toujours le première demande jusqu'à 1,7 secondes, j'ai essayé d'envoyer des messages avec des intervalles de 30 secondes et j'ai eu de 1,5 secondes temps moyen, puis j'ai essayé d'envoyer un post avec des intervalles de 2 secondes, le premier était de 1,41 s et nexts 252ms
ici les gars, vous pouvez consulter la carte: http://i46.tinypic.com/27zjl8n.jpg
Ce même test avec le câble de connexion (standard maison DSL) offre toujours un temps fixe de réponse de ~170 ms intervalles indépendamment (pas d'arguments solides, ici, mais à mon humble avis, peut-être la première tentative est légèrement légèrement plus élevé)
Si il ya quelque chose (ou mal) affectant gravement mobile conections dans la première tentative, une idée les gars?
Il aurait été agréable si vous avez mentionné que la "3G" partie de votre question n'a aucun sens, puisque vous avez le même problème sur le WiFi.
Configurer votre appareil pour utiliser un serveur proxy pour voir ce qui se passe réellement. Utiliser un violon sur votre PC en tant que serveur proxy.
Combien de fois êtes-vous de faire l'appel à votre service? La première fois que l'appel qu'il a lancé le dispositif peut avoir un réveil de la radio 3g, et cela peut prendre quelques secondes pour le faire. Tous les appels effectués peu de temps après votre premier appel devrait être plus rapide.
vous semblez être à droite, le premier post dure environ 2-3 secondes pour terminer, mais nexts prend environ 0.800 s, si j'attends 10 secondes entre chaque post il prend 3 secondes à nouveau.. ou peut-être que ce est http keep-alive-ils liés?
OriginalL'auteur Colas | 2012-09-16
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser cette configuration
C'est la javadoc sur setTcpNoDelay:
public static void setTcpNoDelay (HttpParams params, boolean value)
pas pour moi 🙁 je suis en utilisant org.apache.httpcomponents:httpclient:4.5.4 et setTcpNoDelay(vrai) ne fait aucune différence. En fait TcpNoDelay est définie sur true par défaut. Je ne comprends pas pourquoi Apache Http Client est donc plus lent que OkHttp de la bibliothèque ou de la base client http publié avec golang
OriginalL'auteur MAJS