Ako udržať chat živý, keď telefón zaspí
Agent v Mythexe môže na jednej požiadavke pracovať niekoľko minút a vy ho môžete sledovať z telefónu – ktorý sa zamyká, prepína aplikácie a mení siete, kým pracuje. Dve chyby to pokazili. Pri jednej chat bral každý signál „stránka je znova viditeľná“ ako dôkaz, že jeho spojenie zomrelo, a zacyklil sa, až zostal na „Pripájam…“. Pri druhej telefón, ktorý prespal prvú odpoveď nového chatu, po návrate zobrazil len prvých pár kúskov, kým sa stránka ručne neobnovila. Obe sú opravené.
Ako chat sleduje bežiaci krok
Kým agent pracuje, chat drží otvorený stream z našich serverov: každý krok – myšlienka, volanie nástroja, kúsok odpovede – príde ako udalosť. Ak stream spadne, chat sa znova pripojí a server prehrá nedávne udalosti z vyrovnávacej pamäte, ktorá drží posledných 120 sekúnd. Keď krok skončí, chat od servera tiež vyžiada uloženú históriu a zosúladí to, čo zobrazil, s tým, čo bolo uložené. Tento posledný krok zachytí všetko, čo stream vynechal.
Aby chat rozlíšil živé spojenie od mŕtveho, keď sa nič nedeje, server posiela malý „ping“ každých 15 sekúnd.
Chyba 1: prebudenie zabilo zdravý stream
Prehliadače hovoria stránke, keď sa znova stane viditeľnou: po prepnutí karty, po odomknutí obrazovky. My sme to brali ako podnet skontrolovať spojenie – v praxi sme stream prerušili a znova pripojili, pretože sme predpokladali, že počas skrytia odumrel.
Na telefónoch a vo vnorených prehliadačoch tieto udalosti prichádzajú oveľa častejšie, než streamy odumierajú – pri každom prepnutí karty, každom odomknutí a v niektorých vnorených prehliadačoch takmer každé pár sekúnd. Každá z nich prerušila úplne zdravý stream. Chat sa znova pripojil, prehral, bol znova prerušený a skončil na „Pripájam…“. Potom oznámil, že krok skončil, hoci agent stále pracoval.
Oprava: posudzovať stream podľa toho, či hovorí
Chat teraz zaznamenáva, kedy stream každého projektu naposledy prijal čokoľvek – udalosti aj 15-sekundové pingy. Signál „znova viditeľné“ preruší stream iba vtedy, ak bol 25 sekúnd ticho: dlhšie než interval pingu plus pomalý sieťový skok, takže živý stream sa nikdy nekvalifikuje. Testy overujú, že ping sa počíta ako známka života a že stream, ktorý práve pingol, sa nepovažuje za mŕtvy.
Pravidlo, ktoré sme si z toho odniesli: viditeľnosť stránky hovorí niečo o stránke, nie o sieťovom spojení. Spýtajte sa spojenia.
Chyba 2: pol odpovede po prebudení telefónu
Túto sme vedeli zreprodukovať pri každom teste v simulátore iOS:
- Začnite nový chat a pošlite požiadavku, ktorá trvá dlhšie.
- Nechajte telefón prespať stavbu.
- Vráťte sa, keď krok skončil a dvojminútová vyrovnávacia pamäť prehrávania vypršala.
Chat zobrazil prvé bloky odpovede označené ako dokončené – a zostal tak, kým ste stránku neobnovili.
Prečo
Nový chat nemá vlákno – teda uloženú konverzáciu – kým prvá správa nevytvorí jedno. Stane sa to vo vnútri odosielacej funkcie, až potom, čo odosielanie už zachytilo krok zosúladenia, ktorý ešte stále predpokladal, že vlákno neexistuje. Takže na konci prvého kroku v novom chate zosúladenie nevidelo žiadne vlákno a potichu sa vrátilo, bez toho, aby niečo vyžiadalo.
Zvyčajne si to nikto nevšimol, lebo stream doručil celý krok aj tak. Ale telefón, ktorý prespal krok a vrátil sa až po tom, ako 120-sekundová vyrovnávacia pamäť vypršala, nemohol chýbajúce udalosti dostať zo streamu – a zosúladenie, ktoré malo medzeru vyplniť, sa nikdy nespustilo.
Oprava
- Odoslanie hovorí zosúladeniu, ku ktorému vláknu krok patrí, takže prvý krok nového chatu sa zosúladí rovnako ako každý iný. Ak medzitým otvoríte iný chat, výsledok sa zahodí namiesto toho, aby sa zobrazil na zlom mieste.
- Neúspešné zosúladenie sa zopakuje. Telefón, ktorý sa prebúdza na zlom pripojení, môže zistiť, že krok skončil, a potom ho nedokáže stiahnuť. To sa teraz zapamätá a chat to skúsi znova, keď sa karta znova zobrazí alebo sa sieť vráti.
- „Pracoval“ je úprimný. Každá odpoveď ukazuje, ako dlho agent pracoval. Ak karta nikdy neuvidela správu servera o konci kroku, dopĺňala to z vlastných hodín, ktoré bežali od odoslania až do prebudenia telefónu – vrátane času mimo. Tento údaj je teraz označený ako odhad a po príchode histórie ho nahradí uložená dĺžka.
Čo sme si z toho odniesli
- Testujte na zariadení, ktoré ľudia skutočne používajú, tak, ako ho používajú. Obe chyby žili v medzere medzi „stream, ktorý funguje“ a „telefón vo vrecku“.
- Záložné riešenie, ktoré nikdy nebeží, nie je záložné riešenie. Krok zosúladenia existoval presne na zachytenie tohto prípadu a potichu ho preskakoval.
- Zopakujte aj obnovu. Okamih prebudenia telefónu je často moment, keď je jeho spojenie najhoršie.
- Neukazujte odhad ako fakt. Trvanie z nesprávnych hodín je horšie ako žiadne; označte ho alebo ho nahraďte.
Tá istá práca tiež upratala niekoľko vecí, ktoré uvidíte počas behu kroku: kroky shellu sú označené príkazom, ktorý vykonáva prácu, namiesto cd; snímky obrazovky v chate si zachovajú ľavý horný roh stránky a zmestia sa do stĺpca; a nový projekt prevezme svoj vygenerovaný názov bez obnovenia stránky.
Ak stavate vlastnú aplikáciu pre telefóny, naši sprievodcovia ako vytvoriť mobilne priateľskú webovú aplikáciu a natívne aplikácie vs progresívne webové aplikácie pokrývajú základy. Viac o samotnom chate je v dokumentácii k chatu.