fix(apk): attente de connexion courte et trois essais
Mesure sur ce telephone : api.github.com rend plusieurs adresses, 140.82.121.6 repond en 0,22 s et 140.82.121.5 n'est pas joignable. Un navigateur passe a la suivante aussitot ; l'application attendait son delai entier sur la mauvaise. Huit secondes pour la poignee de main, trente pour la reponse, trois essais. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,8 @@ type
|
||||
FBaseUrl: string;
|
||||
FToken: string;
|
||||
FTimeoutMs: Integer;
|
||||
/// Attente de la POIGNEE DE MAIN, distincte de celle de la reponse.
|
||||
FConnectMs: Integer;
|
||||
FPrivacyChecked: Boolean;
|
||||
public
|
||||
constructor Create(const ABaseUrl, AToken: string);
|
||||
@@ -136,7 +138,7 @@ begin
|
||||
FPrivacyChecked := True;
|
||||
LHttp := THTTPClient.Create;
|
||||
try
|
||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
||||
LHttp.ConnectionTimeout := FConnectMs;
|
||||
LHttp.ResponseTimeout := FTimeoutMs;
|
||||
LHttp.HandleRedirects := False;
|
||||
LHttp.UserAgent := 'PMServer';
|
||||
@@ -193,7 +195,7 @@ begin
|
||||
LRepo := LParts[1];
|
||||
LHttp := THTTPClient.Create;
|
||||
try
|
||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
||||
LHttp.ConnectionTimeout := FConnectMs;
|
||||
LHttp.ResponseTimeout := FTimeoutMs;
|
||||
LHttp.HandleRedirects := False;
|
||||
LHttp.UserAgent := 'PMServer';
|
||||
@@ -328,7 +330,7 @@ begin
|
||||
try
|
||||
LHttp := THTTPClient.Create;
|
||||
try
|
||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
||||
LHttp.ConnectionTimeout := FConnectMs;
|
||||
LHttp.ResponseTimeout := FTimeoutMs;
|
||||
LHttp.HandleRedirects := False;
|
||||
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
||||
@@ -338,7 +340,7 @@ begin
|
||||
// Deux essais, meme raison qu'a la lecture : un SYN perdu ne dit rien
|
||||
// du serveur. Le corps est renvoye depuis le debut a chaque essai.
|
||||
LResp := nil;
|
||||
for var LTry := 1 to 2 do
|
||||
for var LTry := 1 to 3 do
|
||||
begin
|
||||
try
|
||||
LReq.Position := 0;
|
||||
@@ -350,7 +352,7 @@ begin
|
||||
begin
|
||||
Result.Status := ssNetworkError;
|
||||
Result.Error := E.ClassName + ': ' + E.Message;
|
||||
if LTry = 2 then Exit;
|
||||
if LTry = 3 then Exit;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@@ -413,7 +415,14 @@ begin
|
||||
// paquets (ping 71 a 236 ms), et c'est le SYN qui se perd. D'ou DEUX essais
|
||||
// courts plutot qu'une seule longue attente, et un total qui reste sous le
|
||||
// garde-fou de 50 s de l'ecran.
|
||||
FTimeoutMs := 20000;
|
||||
FTimeoutMs := 30000;
|
||||
// COURT POUR SE CONNECTER, LONG POUR REPONDRE. Mesure sur ce telephone :
|
||||
// api.github.com rend plusieurs adresses, 140.82.121.6 repond en 0,22 s et
|
||||
// 140.82.121.5 n'est pas joignable du tout. Un navigateur passe a la
|
||||
// suivante aussitot ; l'application attendait son delai entier sur la
|
||||
// mauvaise. Huit secondes suffisent a une adresse qui repond, et trois
|
||||
// essais laissent le temps de tomber sur une bonne.
|
||||
FConnectMs := 8000;
|
||||
end;
|
||||
|
||||
function TSyncClient.Fetch(const AKnownETag: string): TSyncResult;
|
||||
@@ -439,7 +448,7 @@ begin
|
||||
|
||||
LHttp := THTTPClient.Create;
|
||||
try
|
||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
||||
LHttp.ConnectionTimeout := FConnectMs;
|
||||
LHttp.ResponseTimeout := FTimeoutMs;
|
||||
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
||||
// PAS DE CONNEXION REUTILISEE. Le telephone change de reseau (Wi-Fi qui
|
||||
@@ -467,7 +476,7 @@ begin
|
||||
LStream := TStringStream.Create('', TEncoding.UTF8);
|
||||
try
|
||||
LResp := nil;
|
||||
for var LTry := 1 to 2 do
|
||||
for var LTry := 1 to 3 do
|
||||
begin
|
||||
try
|
||||
LResp := LHttp.Get(FBaseUrl, LStream);
|
||||
@@ -477,7 +486,7 @@ begin
|
||||
begin
|
||||
Result.Status := ssNetworkError;
|
||||
Result.Error := E.ClassName + ': ' + E.Message;
|
||||
if LTry = 2 then Exit;
|
||||
if LTry = 3 then Exit;
|
||||
LStream.Clear;
|
||||
end;
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user