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;
|
FBaseUrl: string;
|
||||||
FToken: string;
|
FToken: string;
|
||||||
FTimeoutMs: Integer;
|
FTimeoutMs: Integer;
|
||||||
|
/// Attente de la POIGNEE DE MAIN, distincte de celle de la reponse.
|
||||||
|
FConnectMs: Integer;
|
||||||
FPrivacyChecked: Boolean;
|
FPrivacyChecked: Boolean;
|
||||||
public
|
public
|
||||||
constructor Create(const ABaseUrl, AToken: string);
|
constructor Create(const ABaseUrl, AToken: string);
|
||||||
@@ -136,7 +138,7 @@ begin
|
|||||||
FPrivacyChecked := True;
|
FPrivacyChecked := True;
|
||||||
LHttp := THTTPClient.Create;
|
LHttp := THTTPClient.Create;
|
||||||
try
|
try
|
||||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
LHttp.ConnectionTimeout := FConnectMs;
|
||||||
LHttp.ResponseTimeout := FTimeoutMs;
|
LHttp.ResponseTimeout := FTimeoutMs;
|
||||||
LHttp.HandleRedirects := False;
|
LHttp.HandleRedirects := False;
|
||||||
LHttp.UserAgent := 'PMServer';
|
LHttp.UserAgent := 'PMServer';
|
||||||
@@ -193,7 +195,7 @@ begin
|
|||||||
LRepo := LParts[1];
|
LRepo := LParts[1];
|
||||||
LHttp := THTTPClient.Create;
|
LHttp := THTTPClient.Create;
|
||||||
try
|
try
|
||||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
LHttp.ConnectionTimeout := FConnectMs;
|
||||||
LHttp.ResponseTimeout := FTimeoutMs;
|
LHttp.ResponseTimeout := FTimeoutMs;
|
||||||
LHttp.HandleRedirects := False;
|
LHttp.HandleRedirects := False;
|
||||||
LHttp.UserAgent := 'PMServer';
|
LHttp.UserAgent := 'PMServer';
|
||||||
@@ -328,7 +330,7 @@ begin
|
|||||||
try
|
try
|
||||||
LHttp := THTTPClient.Create;
|
LHttp := THTTPClient.Create;
|
||||||
try
|
try
|
||||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
LHttp.ConnectionTimeout := FConnectMs;
|
||||||
LHttp.ResponseTimeout := FTimeoutMs;
|
LHttp.ResponseTimeout := FTimeoutMs;
|
||||||
LHttp.HandleRedirects := False;
|
LHttp.HandleRedirects := False;
|
||||||
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
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
|
// 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.
|
// du serveur. Le corps est renvoye depuis le debut a chaque essai.
|
||||||
LResp := nil;
|
LResp := nil;
|
||||||
for var LTry := 1 to 2 do
|
for var LTry := 1 to 3 do
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
LReq.Position := 0;
|
LReq.Position := 0;
|
||||||
@@ -350,7 +352,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
Result.Status := ssNetworkError;
|
Result.Status := ssNetworkError;
|
||||||
Result.Error := E.ClassName + ': ' + E.Message;
|
Result.Error := E.ClassName + ': ' + E.Message;
|
||||||
if LTry = 2 then Exit;
|
if LTry = 3 then Exit;
|
||||||
end;
|
end;
|
||||||
end;
|
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
|
// 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
|
// courts plutot qu'une seule longue attente, et un total qui reste sous le
|
||||||
// garde-fou de 50 s de l'ecran.
|
// 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;
|
end;
|
||||||
|
|
||||||
function TSyncClient.Fetch(const AKnownETag: string): TSyncResult;
|
function TSyncClient.Fetch(const AKnownETag: string): TSyncResult;
|
||||||
@@ -439,7 +448,7 @@ begin
|
|||||||
|
|
||||||
LHttp := THTTPClient.Create;
|
LHttp := THTTPClient.Create;
|
||||||
try
|
try
|
||||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
LHttp.ConnectionTimeout := FConnectMs;
|
||||||
LHttp.ResponseTimeout := FTimeoutMs;
|
LHttp.ResponseTimeout := FTimeoutMs;
|
||||||
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
||||||
// PAS DE CONNEXION REUTILISEE. Le telephone change de reseau (Wi-Fi qui
|
// PAS DE CONNEXION REUTILISEE. Le telephone change de reseau (Wi-Fi qui
|
||||||
@@ -467,7 +476,7 @@ begin
|
|||||||
LStream := TStringStream.Create('', TEncoding.UTF8);
|
LStream := TStringStream.Create('', TEncoding.UTF8);
|
||||||
try
|
try
|
||||||
LResp := nil;
|
LResp := nil;
|
||||||
for var LTry := 1 to 2 do
|
for var LTry := 1 to 3 do
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
LResp := LHttp.Get(FBaseUrl, LStream);
|
LResp := LHttp.Get(FBaseUrl, LStream);
|
||||||
@@ -477,7 +486,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
Result.Status := ssNetworkError;
|
Result.Status := ssNetworkError;
|
||||||
Result.Error := E.ClassName + ': ' + E.Message;
|
Result.Error := E.ClassName + ': ' + E.Message;
|
||||||
if LTry = 2 then Exit;
|
if LTry = 3 then Exit;
|
||||||
LStream.Clear;
|
LStream.Clear;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|||||||
Reference in New Issue
Block a user