Se il server può fornire una stima approssimativa della durata del lavoro, restituirò tale stima nella prima risposta (quella che indica che il lavoro è stato ricevuto / accettato). Il client può quindi attendere almeno quella volta prima che inizi a eseguire il polling dei risultati.
Per evitare di sovraccaricare un server con richieste di polling non riuscite, è possibile utilizzare anche uno schema che viene spesso utilizzato per inviare tentativi su un protocollo inaffidabile: dopo aver inviato una richiesta, attendere un tempo T prima di inviare un nuovo tentativo. Dopo aver inviato un tentativo, raddoppia il tempo di attesa, fino a un T2 massimo. Dopo il successo, il tempo di attesa viene ripristinato sul valore predefinito (minimo) T1. Ad esempio, potresti utilizzare i valori T1 = 250ms e T2 = 16s
Ad esempio, ecco come sarà il sondaggio per un lavoro che è stimato in 2 minuti e viene eseguito un po 'in ritardo (latenza di rete ignorata):
Time Action/Reply
---- ------------
0:00.000 Start job. Server responds with a duration of 2:00 minutes
2:00.000 Polling starts. Server responds job still running
2:00.250 First retry. Job still running
2:00.750 Second retry. Job still running
2:01.429 Job finishes
2:01.750 Third retry. Job reported as done.
Come puoi vedere, c'è una certa latenza nel riportare che il lavoro è stato eseguito, ma cos'è un ritardo di alcune centinaia di millisecondi se stavi già aspettando 2 minuti per il completamento del lavoro?