Nakon ponovnog povezivanja WebSocketa preko proksija, obnovite i sesiju
Namjerno obnovite pretplate aplikacije i nesigurno stanje poruka nakon uspostavljanja nove WebSocket veze preko proksija.
Povratni poziv za ponovno povezivanje se izvršava i novi socket se otvara. To je oporavak transporta. To ne znači nužno da su vaše pretplate, potvrde poruka ili sesija aplikacije nastavile tamo gdje je prethodna veza stala.
Čak i ista proksijska krajnja točka može stvoriti novu odlaznu vezu. Promijenjena izlazna IP adresa također može pokrenuti vlastitu politiku sesije odredišta. Tretirajte novi socket kao novu vezu i slijedite dokumentiranu razmjenu oporavka aplikacije. Odlučite da li radni tok treba zadržati svoju proksijsku rutu pri ponovnom povezivanju.
Zadržite malo više od posljednjeg URL-a
Korisno stanje oporavka može uključivati ovlašteni identitet sesije, željene pretplate, identifikator posljednjeg potvrđenog događaja i operacije koje još čekaju potvrdu. Ta polja pripadaju protokolu aplikacije; WebSocket ne definira univerzalni token za nastavak.
Odlučite da li ćete nastaviti od kursora, preuzeti novu snimku stanja ili prihvatiti prazninu. Ako izvor događaja ne nudi sučelje za reprodukciju, brže ponovno povezivanje ne može dokazati da nijedna poruka nije propuštena.
Slanje dvaput može značiti i izvršavanje dvaput
Poruka stavljena u lokalni red prije prekida možda nikada nije napustila klijent. Druga je možda stigla do servera dok je njezina potvrda izgubljena. Slijepo ponovno slanje svake nepotvrđene naredbe tretira ta dva slučaja kao identična.
Koristite identifikatore zahtjeva usluge, podršku za idempotentnost ili mehanizam usklađivanja gdje je dostupno. Ponovno povezivanje transporta ne može učiniti radnju aplikacije reverzibilnom niti je automatski ukloniti iz duplikata.
Ograničite pokušaje ponovnog povezivanja i prilagodite tempo politici aplikacije. RFC 6455 preporučuje odustajanje nakon nenormalnog zatvaranja; mnoštvo klijenata koji odmah pokušavaju ponovno može povećati opterećenje tijekom prekida.
Zabilježite koju je proksijsku rutu odabrao svaki pokušaj, ali držite oporavak rute odvojenim od oporavka aplikacije. „Ponovno povezano“ koristan je dokaz. „Sustigao i spreman poslati još posla“ zahtijeva dodatnu razmjenu aplikacije koja to utvrđuje.