Блог

Телефон ұйықтағанда чатты тірі ұстау

Mythex-тің агенті бір сұраныс бойынша бірнеше минут жұмыс істей алады, ал сіз оны телефоннан қарап отыруыңыз мүмкін — ол жұмыс істеп тұрғанда телефон құлыпталады, қолданбаны ауыстырады және желіні өзгертеді. Екі қате мұндай жағдайда қиындық туғызды. Біріншісінде чат «бет қайта көрінді» деген әр сигналды байланыстың үзілгені деп санап, «Қосылып жатыр…» деген жерде айналып қалды. Екіншісінде жаңа чаттың алғашқы жауабын телефон ұйықтап өткізіп жіберіп, оянғанда тек алғашқы бірнеше бөлікті көрді — қолмен жаңартқанға дейін. Екеуі де түзетілді.

Чат жүріп жатқан жауапты қалай бақылайды

Агент жұмыс істеп жатқанда, чат серверлерімізден ағын ашық ұстайды: әр қадам — ой, құрал шақыруы, жауаптың бір бөлігі — оқиға ретінде келеді. Ағын үзілсе, чат қайта қосылады, ал сервер соңғы 120 секундты сақтайтын буферден соңғы оқиғаларды қайта жібереді. Жауап аяқталғанда чат сақталған тарихты серверден сұрап, көрсеткенін сақталғанмен салыстырады. Бұл соңғы қадам ағын өткізіп алған нәрсені түзетеді.

Ешнәрсе болмай тұрғанда тірі байланысты өлі байланыстан ажырату үшін сервер әр 15 секунд сайын кішкене «ping» жібереді.

1-қате: оянуда сау ағын өлтірілді

Браузерлер бет қайтадан көрінетін болғанда хабар береді: қойындыны ауыстырғаннан кейін, экранды ашқаннан кейін. Біз мұны байланысты тексеруге белгі ретінде пайдаландық — іс жүзінде ағынды үзіп, қайта қосылдық, ол жасырын кезде өлді деп санап.

Телефондарда және ендірілген браузерлерде бұл оқиға ағын өлгеннен әлдеқайда жиі болады — әр қойынды ауыстыру, әр құлыптан ашу, ал кейбір ендірілген браузерлерде шамамен әр екі секунд сайын. Әр оқиға сау ағынды үзді. Чат қайта қосылды, қайтадан ойнатылды, тағы үзілді және «Қосылып жатыр…» деген жерде қалды. Содан кейін агент әлі жұмыс істеп жатқан кезде жауап аяқталды деп көрсетті.

Түзету: ағынды ол сөйлесіп тұр ма, соған қарап бағалау

Енді чат әр жобаның ағыны соңғы рет бірдеңе алған уақытты жазады — оқиғалар да, 15 секундтық ping-тер де. «Қайта көрінді» сигналы тек 25 секунд бойы үнсіз тұрған ағынды ғана үзеді: бұл ping аралығынан және баяу желі секірісінен ұзақ, сондықтан тірі ағын ешқашан осы шартқа сәйкес келмейді. Тесттер ping тірі белгі ретінде саналатынын және жаңа ping жіберген ағынның өлі деп танылмайтынын тексереді.

Бізден шыққан ереже: бет көрінуі бетке қатысты нәрсені айтады, желі байланысына емес. Байланыстан өзін сұраңыз.

2-қате: телефон оянғаннан кейін жауаптың жартысы

Бұны iOS симуляторында әр рет қайталай аламыз:

  1. Жаңа чат бастап, біраз уақыт алатын сұраныс жіберіңіз.
  2. Телефонды құрылыс барысында ұйықтатыңыз.
  3. Жауап аяқталып, екі минуттық қайта ойнату буфері мерзімі өткен соң оралыңыз.

Чат жауаптың алғашқы бірнеше блогын аяқталған деп көрсетті — және бетті қайта жүктегенге дейін сол күйде қалды.

Неге

Жаңа чаттың тред — яғни сақталған сөйлесуі — алғашқы хабарлама оны жасағанша жоқ. Бұл жіберу функциясының ішінде, жіберу сақтауды (reconcile қадамын) шақырғаннан кейін болады, ал ол қадам әлі тред жоқ деп есептеп тұрған. Сондықтан жаңа чаттың бірінші бурылының соңында reconcile тредті көрмей, үнсіз қайтып кетті.

Көбіне ешкім байқамады, себебі ағын бәрібір бүкіл бурылды жеткізіп үлгірген еді. Бірақ телефон бурылды ұйықтап өткізіп, 120 секундтық буфер мерзімі өткеннен кейін оралса, ағын жетіспеген оқиғаларды бере алмайтын. Ал жетіспейтін бөлікті толтыруға арналған reconcile ешқашан іске қосылмаған еді.

Түзету

  • Жіберу reconcile-ге бурыл қай тредке тиісті екенін айтады, сондықтан жаңа чаттың бірінші бурылы да басқалары сияқты салыстырылады. Жауап келгенде басқа чатты ашсаңыз, нәтиже дұрыс емес жерде көрсетілмей, тасталады.
  • Сәтсіз reconcile қайта жасалады. Телефон нашар байланыста оянғанда бурыл аяқталып, оны алу сәтсіз болуы мүмкін. Енді бұл есте сақталады, ал қойынды қайта көрінгенде немесе желі қайта қосылғанда чат қайта сұрайды.
  • «Жұмыс істеген уақыт» шынайы. Әр жауап агенттің қанша жұмыс істегенін көрсетеді. Қойынды сервердің жауап аяқталғанын көрмесе, ол бұрын Send басылғаннан бастап оянғанға дейінгі, уақыт ішінде өткен кезді қосқан өз сағатынан толтыратын. Енді бұл мән шамамен алынғаны белгіленеді, ал тарих келгенде сақталған ұзақтықпен ауыстырылады.

Біз не үйрендік

  • Сол пайдаланушы қолданатын құрылғыда, олардың қолданатындай тестілеңіз. Екі қате де «жұмыс істейтін ағын» мен «қалтадағы телефон» арасындағы аралықта жасырынған еді.
  • Іске қосылмайтын қалпына келтіру — қалпына келтіру емес. Reconcile қадамы дәл осы жағдайды ұстау үшін бар еді, бірақ үнсіз өткізіп жіберді.
  • Қалпына келтіруді де қайталаңыз. Телефон оянған сәт көбіне байланыс ең нашар болған сәт.
  • Болжамды дерек ретінде көрсетпеңіз. Дұрыс емес сағаттан алынған ұзақтық жоқтан да жаман; оны белгілеңіз немесе ауыстырыңыз.

Сол жұмыс барысында жауап жүріп жатқанда көрінетін бірнеше нәрсе де реттелді: shell қадамдары cd емес, жұмысты атқаратын команда арқылы белгіленеді, чаттағы скриншоттар беттің жоғарғы сол жақ бөлігін сақтайды және бағанға сиады, ал жаңа жоба жаңарту қажет етпей жасалған атауын алады.

Егер телефондарға арналған өз қолданбаңызды жасасаңыз, мобильді-дос веб қолданба жасау және native және progressive web қолданбалары нұсқаулықтары негіздерін түсіндіреді. Чаттың өзі туралы көбірек чат құжаттарында бар.

Mythex · Pricing · ЖИ көмегімен кез келген нәрсені жасаңыз · Сайттар мен қосымшаларға арналған үлгілер · Mythex салыстыруда · ЖИ-мен қосымша жасау сөздігі · ЖИ-мен қосымша жасауға арналған тегін құралдар · 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 Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)