Blog

Mbajtja e chat-it gjallë kur telefoni fle

Agjenti i Mythex mund të punojë për minuta të tëra për një kërkesë, dhe ti mund ta shikosh nga një telefon që kyçet, ndërron aplikacionet dhe ndryshon rrjetin gjatë punës. Dy gabime e prishnin këtë. Në njërin, chat-i e trajtonte çdo sinjal “faqja është përsëri e dukshme” si provë se lidhja e tij kishte vdekur, dhe rrotullohej derisa mbetej te “Duke u lidhur…”. Në tjetrin, një telefon që kishte fjetur gjatë përgjigjes së parë të një chat-i të ri kthehej duke shfaqur vetëm disa pjesët e para të saj, derisa rifreskoje dorazi. Të dyja janë rregulluar.

Si e ndjek chat-i një turn që po punon

Kur agjenti punon, chat-i mban të hapur një transmetim nga serverat tanë: çdo hap, një mendim, një thirrje mjeti, një pjesë e përgjigjes, arrin si ngjarje. Nëse transmetimi ndërpritet, chat-i rilidhet dhe serveri rishfaq ngjarjet e fundit nga një buffer që mban 120 sekondat e fundit. Kur turni mbaron, chat-i kërkon edhe historikun e ruajtur nga serveri dhe e pajton atë që shfaqi me atë që është ruajtur. Ky hap i fundit kap çdo gjë që transmetimi i humbi.

Për të dalluar një lidhje të gjallë nga një e vdekur kur nuk ndodh asgjë, serveri dërgon një “ping” të vogël çdo 15 sekonda.

Gabimi 1: zgjimi vriste një transmetim të shëndetshëm

Shfletuesit i tregojnë një faqeje kur bëhet përsëri e dukshme: pas ndërrimit të skedës, pas zhbllokimit të ekranit. Ne e përdornim këtë si shenjë për të kontrolluar lidhjen, dhe në praktikë për ta ndërprerë transmetimin dhe rilidhur, duke supozuar se kishte vdekur ndërkohë që ishte e fshehur.

Në telefona dhe shfletues të integruar, këto ngjarje ndodhin shumë më shpesh se sa vdesin transmetimet: çdo ndërrim skede, çdo zhbllokim, dhe në disa shfletues të integruar rreth çdo disa sekondash. Çdo njëra ndërpriste një transmetim krejt të shëndetshëm. Chat-i rilidhej, rifitonte, ndërpritej përsëri, dhe mbetej te “Duke u lidhur…”. Pastaj thoshte se turni kishte mbaruar ndërsa agjenti akoma punonte.

Rregullimi: gjykoje transmetimin nga fakti nëse po fliste

Chat-i tani regjistron kur transmetimi i çdo projekti mori për herë të fundit çfarëdo gjëje: ngjarje dhe ping-et 15-sekondëshe të dyja. Një sinjal “faqja është përsëri e dukshme” ndërpret një transmetim vetëm nëse ka qenë i heshtur për 25 sekonda: më shumë se intervali i ping-ut plus një kërcim i ngadaltë rrjeti, kështu që një transmetim i gjallë nuk kualifikohet kurrë. Testet kontrollojnë që një ping llogaritet si shenjë jete, dhe që një transmetim që sapo ka dërguar ping nuk trajtohet si i vdekur.

Rregulli që nxorëm nga kjo: dukshmëria e një faqeje tregon diçka për faqen, jo për lidhjen e rrjetit. Pyet lidhjen.

Gabimi 2: gjysmë përgjigjeje pasi u zgjua telefoni

Këtë e riprodhonim gjithmonë në simulatorin iOS:

  1. Nis një chat të ri dhe dërgo një kërkesë që zgjat.
  2. Lër telefonin të flejë gjatë ndërtimit.
  3. Kthehu kur turni ka mbaruar dhe buffer-i 120 sekondash ka skaduar.

Chat-i shfaqte disa blloqet e para të përgjigjes, të shënuara si të mbaruara, dhe qëndronte kështu derisa rifreskoje faqen.

Pse

Një chat i ri nuk ka ende një thread, pra bisedën e ruajtur, derisa mesazhi i parë ta krijojë atë. Kjo ndodh brenda funksionit të dërgimit, pasi dërgimi kishte kapur tashmë hapin e pajtimit, i cili ende mendonte se nuk kishte thread. Kështu që në fund të turnit të parë në një chat të ri, pajtimi nuk pa asnjë thread dhe u kthye në heshtje pa kërkuar asgjë.

Zakonisht askush nuk e vinte re, sepse transmetimi kishte dorëzuar tashmë gjithë turnin. Por një telefon që kishte fjetur gjatë turnit dhe u kthye pasi buffer-i 120-sekondësh kishte skaduar nuk mund t’i merrte ngjarjet e munguara nga transmetimi, dhe pajtimi që duhej ta mbushte boshllëkun nuk kishte ekzekutuar kurrë.

Rregullimi

  • Dërgimi i tregon pajtimit cilit thread i takon turni, kështu që turni i parë i një chat-i të ri pajtohet si çdo tjetër. Nëse ke hapur një chat tjetër kur të vijë përgjigjia, rezultati hidhet në vend që të shfaqet në vendin e gabuar.
  • Pajtimi i dështuar riprovohet. Një telefon që zgjohet me lidhje të keqe mund ta gjejë turnin të mbaruar dhe pastaj të dështojë të marrë historikun. Kjo tani mbahet mend, dhe chat-i pyet përsëri kur shfaqet skeda ose kthehet rrjeti.
  • “Worked for” është i ndershëm. Çdo përgjigje tregon sa punoi agjenti. Nëse skeda nuk pa kurrë mesazhin e serverit për fund turni, më parë e plotësonte nga ora e vet, që numëronte nga Send deri kur u zgjua telefoni, duke përfshirë kohën e larguar. Kjo shifër tani shënohet si vlerësim, dhe zëvendësohet nga kohëzgjatja e ruajtur sapo arrin historiku.

Çfarë morëm nga kjo

  • Testo në pajisjen që njerëzit përdorin vërtet, në mënyrën që e përdorin. Të dy gabimet jetonin në hapësirën midis “një transmetimi që punon” dhe “një telefoni në xhep”.
  • Një rezervë që nuk ekzekutohet kurrë nuk është rezervë. Hapi i pajtimit ekzistonte pikërisht për ta kapur këtë rast, dhe e kapërcente në heshtje.
  • Riprovo edhe rikuperimin. Momenti kur zgjohet një telefon është shpesh kur lidhja e tij është më e dobët.
  • Mos shfaq një hamendje si fakt. Një kohëzgjatje nga ora e gabuar është më keq se aspak; shëno ose zëvendëso.

I njëjti punë pastroi edhe disa gjëra që do t’i shohësh ndërsa një turn po punon: hapat e shell-it etiketohen nga komanda që bën punën, jo nga cd; screenshot-et në chat mbajnë pjesën e sipërme majtas të faqes dhe përshtaten me kolonën; dhe një projekt i ri merr emrin e gjeneruar pa rifreskim.

Nëse po ndërton aplikacion për telefona, udhëzuesit tanë për ndërtimin e një aplikacioni web të përshtatshëm për celular dhe aplikacionet native kundrejt atyre progresive web mbulojnë bazat. Më shumë për vetë chat-in gjendet në dokumentacionin e chat-it.

Mythex · Pricing · Ndërtoni çdo gjë me AI · Shablone faqesh dhe aplikacionesh · Mythex në krahasim · Fjalori i ndërtimit të aplikacioneve me AI · Mjete falas për ndërtimin e aplikacioneve me 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 Slovenščina Soomaali Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)