Blog

Ohranjanje klepeta, ko telefon spi

Agent v Mythexu lahko dela minute pri eni zahtevi, vi pa to morda spremljate s telefona — ta se med delom zaklene, preklaplja aplikacije in menja omrežja. Dve napaki sta to naredili narobe. Pri prvi je klepet vsak signal »stran je spet vidna« štel za dokaz, da je njegova povezava odpovedala, in je ponavljal ponovno povezavo, dokler ni obtičal pri »Povezovanje …«. Pri drugi je telefon, ki je med prvim odgovorom novega klepeta spal, po vrnitvi prikazal le prvih nekaj delov odgovora — dokler ni stran ročno osvežena. Obe sta odpravljeni.

Kako klepet spremlja tek poteze

Med delom agenta klepet drži odprt tok s strežnikov: vsak korak — misel, klic orodja, del odgovora — pride kot dogodek. Če se tok prekine, se klepet ponovno poveže, strežnik pa ponovno predvaja nedavne dogodke iz medpomnilnika, ki hrani zadnjih 120 sekund. Ko se poteza konča, klepet strežnik tudi vpraša za shranjeno zgodovino in uskladi, kar je prikazal, s tem, kar je shranjeno. Ta zadnji korak ujame vse, kar je tok izpustil.

Da lahko med mirovanjem ločimo živo povezavo od mrtve, strežnik vsakih 15 sekund pošlje majhen »ping«.

Napaka 1: prebujanje je ubilo zdrav tok

Brskalniki sporočijo strani, da je spet vidna: po preklopu zavihka, po odklepanju zaslona. Mi smo to uporabili kot znak, naj preverimo povezavo — v praksi pa za prekinitev toka in ponovno povezavo, ker smo predvidevali, da je med skritostjo odpovedal.

Na telefonih in vgrajenih brskalnikih se ti dogodki pojavijo veliko pogosteje, kot tokovi odpovejo — ob vsakem preklopu zavihka, vsakem odklepanju, v nekaterih vgrajenih brskalnikih na vsakih nekaj sekund. Vsak tak dogodek je prekinil popolnoma zdrav tok. Klepet se je ponovno povezal, ponovno predvajal, bil znova prekinjen in na koncu obtičal pri »Povezovanje …«. Nato je sporočil, da je poteze konec, čeprav agent še vedno dela.

Rešitev: presodi tok po tem, ali govori

Klepet zdaj beleži, kdaj je tok vsakega projekta nazadnje kaj prejel — dogodke in 15-sekundne pinge enako. Signal »spet vidno« prekine tok samo, če je bil 25 sekund tih: dlje od intervala pingov plus počasen omrežni skok, zato živ tok nikoli ne pride v poštev. Testi preverijo, da ping šteje kot znak življenja in da tok, ki je pravkar poslal ping, ni obravnavan kot mrtev.

Pravilo, ki smo ga iz tega vzeli: vidnost strani pove nekaj o strani, ne o omrežni povezavi. Vprašajte povezavo.

Napaka 2: pol odgovora po prebujanju telefona

To smo lahko vedno znova reproducirali v simulatorju iOS:

  1. Začnite nov klepet in pošljite zahtevo, ki traja.
  2. Pustite, da telefon med gradnjo spi.
  3. Vrnite se, ko je poteza končana in je dvominutni medpomnilnik za ponovno predvajanje potekel.

Klepet je pokazal prvih nekaj blokov odgovora, označenih kot končani — in tako ostal, dokler stran niste osvežili.

Zakaj

Nov klepet nima pogovorne niti — shranjene zgodovine — dokler prvo sporočilo ne ustvari ene. To se zgodi znotraj funkcije za pošiljanje, potem ko je pošiljanje že zajelo korak usklajevanja, ki je še vedno mislil, da pogovorne niti ni. Ob koncu prve poteze v novem klepetu je usklajevanje videlo, da niti ni, in se tiho vrnilo, ne da bi kaj zahtevalo.

Običajno tega nihče ni opazil, ker je tok vseeno dostavil celo potezo. Toda telefon, ki je med potezo spal in se vrnil po tem, ko je 120-sekundni medpomnilnik za ponovno predvajanje potekel, manjkajočih dogodkov ni mogel dobiti iz toka — usklajevanje, ki bi moralo zapolniti vrzel, pa se sploh ni izvedlo.

Rešitev

  • Pošiljanje sporoči usklajevanju, kateri pogovorni niti poteza pripada, da se prva poteza novega klepeta usklajuje kot vsaka druga. Če ste med tem, ko odgovor pride, odprli drug klepet, se rezultat zavrže in ne prikaže na napačnem mestu.
  • Neuspešno usklajevanje se poskusi znova. Telefon, ki se zbudi na slabi povezavi, lahko ugotovi, da je poteze konec, nato pa je ne more pridobiti. To je zdaj zabeleženo, klepet pa znova vpraša, ko se zavihek spet prikaže ali se omrežje povrne.
  • »Delal je« je pošteno. Vsak odgovor pokaže, kako dolgo je agent delal. Če zavihek nikoli ni videl strežnikovega sporočila o koncu poteze, je to prej iz svoje ure nadomeščal — ta je tekla od pošiljanja do prebujanja telefona, vključno s časom odsotnosti. Ta čas je zdaj označen kot ocena in se nadomesti s shranjenim trajanjem, ko zgodovina prispe.

Kaj smo iz tega vzeli

  • Preizkušajte na napravi, ki jo ljudje dejansko uporabljajo, na način, kako jo uporabljajo. Obe napaki sta živeli v vrzeli med »tokom, ki deluje« in »telefonom v žepu«.
  • Rezervna pot, ki se nikoli ne sproži, ni rezervna pot. Korak usklajevanja je obstajal prav za ta primer, pa ga je tiho preskočil.
  • Tudi obnovitev ponovite. Trenutek, ko se telefon prebudi, je pogosto trenutek, ko je njegova povezava najslabša.
  • Ne prikazujte ugibanja kot dejstva. Trajanje, izmerjeno z napačno uro, je slabše kot nobeno; označite ga ali zamenjajte.

Isto delo je uredilo še nekaj stvari, ki jih boste videli med potekom poteze: koraki v lupini so označeni z ukazom, ki opravlja delo, namesto z cd; posnetki zaslona v klepetu ohranijo zgornji levi kot strani in se prilegajo stolpcu; nov projekt prevzame svoje samodejno generirano ime brez osveževanja.

Če gradite lastno aplikacijo za telefone, naša vodnika o gradnji spletne aplikacije, prijazne mobilnim napravam in nativnih proti progresivnim spletnim aplikacijam pokrivata osnove. Več o samem klepetu je v dokumentaciji o klepetu.

Mythex · Pricing · Zgradite karkoli z AI · Predloge za spletna mesta in aplikacije · Mythex v primerjavi · Slovar pojmov gradnje aplikacij z AI · Brezplačna orodja za gradnjo aplikacij z AI · English

English አማርኛ العربية Български বাংলা Bosanski 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 Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)