Blog

Održavanje chata živim kada telefon zaspi

Mythex agent može raditi minutama na jednom zahtjevu, a vi ga možda gledate s telefona — koji se zaključava, prebacuje aplikacije i mijenja mreže dok radi. Dvije greške su to pokvarile. U jednoj, chat je svaki signal „stranica je ponovo vidljiva” tretirao kao dokaz da mu je veza prekinuta, pa je kružio dok nije ostao na „Povezivanje…”. U drugoj, telefon koji je prespavao prvi odgovor novog chata po povratku je prikazao samo prvih nekoliko dijelova, sve dok ručno ne osvježite stranicu. Obje su popravljene.

Kako chat prati aktivan potez

Dok agent radi, chat drži otvoren stream s našim serverima: svaki korak — misao, poziv alata, dio odgovora — stiže kao događaj. Ako se stream prekine, chat se ponovo povezuje, a server ponovo šalje nedavne događaje iz bafera koji čuva posljednjih 120 sekundi. Kada se potez završi, chat također traži od servera sačuvanu historiju i usklađuje ono što je prikazao s onim što je pohranjeno. Taj posljednji korak hvata sve što je stream propustio.

Da bi razlikovao živu vezu od mrtve dok se ništa ne dešava, server šalje mali „ping” svakih 15 sekundi.

Greška 1: buđenje je ubijalo zdrav stream

Pregledači javljaju stranici kada ponovo postane vidljiva: nakon prebacivanja taba, nakon otključavanja ekrana. Mi smo to koristili kao znak da provjerimo vezu — u praksi, da prekinemo stream i ponovo se povežemo, pretpostavljajući da je umro dok je bio skriven.

Na telefonima i u ugrađenim pregledačima ovi događaji se aktiviraju mnogo češće nego što streamovi umiru — svako prebacivanje taba, svako otključavanje, a u nekim ugrađenim pregledačima svakih nekoliko sekundi. Svaki od njih prekidao je potpuno zdrav stream. Chat se ponovo povezivao, ponovo primao reprodukciju, bio ponovo prekinut i završio na „Povezivanje…”. Zatim bi prijavio da je potez završen dok je agent još radio.

Popravka: sudite o streamu po tome da li govori

Chat sada bilježi kada je stream svakog projekta posljednji put primio bilo šta — događaje i 15-sekundne pingove podjednako. Signal „ponovo vidljivo” prekida samo stream koji je bio tih 25 sekundi: duže od intervala pinga plus sporiji mrežni skok, pa živi stream nikada ne ispadne. Testovi provjeravaju da ping važi kao znak života i da se stream koji je upravo pingovao ne tretira kao mrtav.

Pravilo koje smo iz ovoga izvukli: vidljivost stranice govori nešto o stranici, a ne o mrežnoj vezi. Pitajte samu vezu.

Greška 2: pola odgovora nakon buđenja telefona

Ovu smo mogli reproducirati svaki put u iOS simulatoru:

  1. Započnite novi chat i pošaljite zahtjev koji traje.
  2. Pustite telefon da zaspi tokom izgradnje.
  3. Vratite se nakon što je potez završen i kada je dvominutni bafer za reprodukciju istekao.

Chat je prikazao prvih nekoliko blokova odgovora, označenih kao završeni — i tako ostao sve dok ne osvježite stranicu.

Zašto

Novi chat nema nit — sačuvani razgovor — dok prva poruka ne napravi jednu. To se dešava unutar funkcije slanja, nakon što je slanje već zabilježilo korak usklađivanja, koji je i dalje mislio da niti nema. Zato je na kraju prvog poteza u novom chatu usklađivanje vidjelo da niti nema i tiho se vratilo bez traženja ičega.

Obično to niko nije primijetio, jer je stream ionako isporučio cijeli potez. Ali telefon koji je prespavao potez i vratio se nakon što je bafer za reprodukciju od 120 sekundi istekao nije mogao dobiti propuštene događaje iz streama — a usklađivanje koje je trebalo popuniti prazninu nikada nije pokrenuto.

Popravka

  • Slanje govori usklađivanju kojoj niti potez pripada, tako da se prvi potez novog chata usklađuje kao i svaki drugi. Ako ste u međuvremenu otvorili drugi chat kada odgovor stigne, rezultat se odbacuje umjesto da se prikaže na pogrešnom mjestu.
  • Neuspjelo usklađivanje se pokušava ponovo. Telefon koji se budi na lošoj vezi može zateći da je potez završen, a da ga ne može preuzeti. To se sada pamti, a chat ponovo pita kada se tab ponovo prikaže ili se mreža vrati.
  • „Worked for” je iskreno. Svaki odgovor pokazuje koliko je agent radio. Ako tab nikada nije vidio serverovu poruku o završetku poteza, ranije bi to popunio sopstvenim satom — koji je išao od trenutka Slanje do buđenja telefona, uključujući vrijeme odsustva. Ta brojka je sada označena kao procjena, a zamjenjuje je sačuvano trajanje čim historija stigne.

Šta smo izvukli iz ovoga

  • Testirajte na uređaju koji ljudi zaista koriste, na način na koji ga koriste. Obje greške su živjele u praznini između „stream koji radi” i „telefon u džepu”.
  • Rezervna opcija koja se nikada ne pokreće nije rezervna opcija. Korak usklađivanja postojao je upravo za ovaj slučaj i tiho ga je preskakao.
  • I oporavak treba ponoviti. Trenutak kada se telefon probudi često je trenutak kada je veza najlošija.
  • Ne prikazujte pretpostavku kao činjenicu. Trajanje izmjereno pogrešnim satom gore je od ikakvog; označite ga ili zamijenite.

Isti rad je također sredio nekoliko stvari koje ćete vidjeti dok potez radi: koraci u shellu označeni su komandom koja obavlja posao umjesto cd, snimci ekrana u chatu zadržavaju gornji lijevi dio stranice i staju u kolonu, a novi projekat preuzima svoje generisano ime bez osvježavanja.

Ako gradite sopstvenu aplikaciju za telefone, naši vodiči o pravljenju web aplikacije prilagođene telefonu i nativnim aplikacijama naspram progresivnih web aplikacija pokrivaju osnove. Više o samom chatu nalazi se u dokumentaciji o chatu.

Mythex · Pricing · Izradite bilo šta uz AI · Šabloni za web stranice i aplikacije · Mythex u poređenju · Rječnik izrade aplikacija uz AI · Besplatni alati za izradu aplikacija uz AI · English

English አማርኛ العربية Български বাংলা Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)