ჩატის გაძლიერება, როცა ტელეფონი იძინებს
Mythex-ის აგენტს შეუძლია ერთ მოთხოვნაზე წუთობით იმუშაოს, და თქვენ შეიძლება ტელეფონიდან უყუროთ — რომელიც იკეტება, აპებს ცვლის და ქსელს ცვლის, სანამ მუშაობს. ორმა შეცდომამ ეს გააფუჭა. ერთში ჩატი ყოველ სიგნალს, რომ გვერდი ისევ ხილულია, ხედავდა როგორც მტკიცებულებას, რომ მისი კავშირი დაიღუპა, და იმეორებდა, სანამ „უკავშირდება…“-ზე არ გაჩერდებოდა. მეორეში ტელეფონმა, რომელიც ახალი ჩატის პირველ პასუხს ძინებაში გამოტოვა, დაბრუნებისას მხოლოდ პასუხის პირველი რამდენიმე ნაწილი ნახა, სანამ ხელით არ განაახლებდა. ორივე გასწორებულია.
როგორ მიჰყვება ჩატი გაშვებულ ციკლს
აგენტის მუშაობისას ჩატი ჩვენი სერვერებიდან ღია სტრიმს ინახავს: ყოველი ნაბიჯი — ფიქრი, ინსტრუმენტის გამოძახება, პასუხის ნაწილი — ივენთად მოდის. თუ სტრიმი გაწყდება, ჩატი ხელახლა უკავშირდება, და სერვერი ბოლო 120 წამის ბუფერიდან ახლახანს მომხდარ ივენთებს ახლიდან უგზავნის. ციკლის დასრულებისას ჩატი სერვერს შენახულ ისტორიას სთხოვს და იმას, რაც აჩვენა, იმასთან აჰყვანს, რაც შეინახა. ეს ბოლო ნაბიჯი იჭერს ყველაფერს, რაც სტრიმმა გამოტოვა.
რომ გავარკვიოთ, არის თუ არა კავშირი ცოცხალი, როცა არაფერი ხდება, სერვერი ყოველ 15 წამში პატარა „ping“-ს აგზავნის.
შეცდომა 1: გაღვიძებამ ჯანმრთელი სტრიმი გააწყვეტინა
ბრაუზერები გვერდს ატყობინებენ, როცა ის ისევ ხილული ხდება: ტაბის შეცვლის შემდეგ, ეკრანის განბლოკვის შემდეგ. ჩვენ ამას ვიყენებდით, როგორც მინიშნებას კავშირის შესამოწმებლად, და პრაქტიკაში — სტრიმის შესაწყვეტად და ხელახლა დასაკავშირებლად, იმ დაშვებით, რომ ის დაიღუპა, სანამ ფარული იყო.
ტელეფონებზე და ჩაშენებულ ბრაუზერებში ეს ივენთები გაცილებით ხშირად მოდის, ვიდრე სტრიმები იღუპება — ყოველ ტაბის ცვლილებაზე, ყოველ განბლოკვაზე, და ზოგ ჩაშენებულ ბრაუზერში დაახლოებით ყოველ რამდენიმე წამში. თითოეული მათგანი ჯანმრთელ სტრიმს წყვეტდა. ჩატი ხელახლა უკავშირდებოდა, ახლიდან იღებდა, ისევ წყდებოდა, და საბოლოოდ „უკავშირდება…“-ზე რჩებოდა. შემდეგ კი ამბობდა, რომ ციკლი დასრულდა, მაშინ როცა აგენტი ჯერ კიდევ მუშაობდა.
გამოსწორება: სტრიმს განსჯის იმით, ლაპარაკობს თუ არა
ახლა ჩატი იმახსოვრებს, როდის მიიღო ბოლოს რამე თითოეულმა პროექტის სტრიმმა — ივენთებიც და 15-წამიანი ping-ებიც. „ხელახლა ხილული“ სიგნალი სტრიმს მხოლოდ მაშინ წყვეტს, თუ ის 25 წამი დუმდა: ეს ping-ის ინტერვალზე და ნელი ქსელის ნახტომზე მეტია, ამიტომ ცოცხალი სტრიმი ამ წესს არასდროს ემთხვევა. ტესტები ამოწმებს, რომ ping სიცოცხლის ნიშნად ითვლება, და რომ სტრიმი, რომელიც ახლახან იგზავნა ping-ი, მკვდრად არ ითვლება.
წესი, რომელიც აქედან ავიღეთ: გვერდის ხილვადობა გვერდზე მეტყველებს და არა ქსელურ კავშირზე. კითხეთ თავად კავშირი.
შეცდომა 2: ტელეფონის გაღვიძების შემდეგ პასუხის ნახევარი
ამ შეცდომას ყოველთვის ვიმეორებდით iOS სიმულატორში:
- დაიწყეთ ახალი ჩატი და გაგზავნეთ მოთხოვნა, რომელიც გარკვეულ დროს საჭიროებს.
- დაუშვით, რომ ტელეფონმა აშენების დროს მძინარე ყოფნა გააგრძელოს.
- დაბრუნდით მაშინ, როცა ციკლი უკვე დასრულდა და ორწუთიანი გამეორების ბუფერი ამოიწურა.
ჩატი პასუხის პირველ რამდენიმე ბლოკს აჩვენებდა, როგორც დასრულებულს, და ასე რჩებოდა გვერდის განახლებამდე.
რატომ
ახალ ჩატს თრედი — შენახული საუბარი — არ აქვს, სანამ პირველი შეტყობინება მას არ შექმნის. ეს ხდება გაგზავნის ფუნქციის შიგნით, შემდეგ, რაც გაგზავნამ უკვე დაიჭირა შეჯერების ნაბიჯი, რომელიც ჯერ კიდევ ფიქრობდა, რომ თრედი არ არსებობდა. ამიტომ ახალი ჩატის პირველი ციკლის ბოლოს შეჯერებამ თრედი ვერ იპოვა და ჩუმად დააბრუნა, უფრო არაფრის მოთხოვნის გარეშე.
ჩვეულებრივ ამას არავინ ამჩნევდა, რადგან სტრიმს მთელი ციკლი ისედაც მიეწოდებოდა. მაგრამ ტელეფონი, რომელმაც ციკლი ძინებაში გამოტოვა და გამეორების 120-წამიანი ბუფერის ამოწურვის შემდეგ დაბრუნდა, სტრიმიდან აკლებულ ივენთებს ვერ მიიღებდა — და შეჯერება, რომელსაც უნდა შეევსო ხარვეზი, ერთხელაც არ გაშვებულა.
გამოსწორება
- გაგზავნა შეჯერებას ეუბნება, რომელ თრედს ეკუთვნის ციკლი, ასე რომ ახალი ჩატის პირველი ციკლი ისევე შეჯერდება, როგორც ნებისმიერი სხვა. თუ პასუხის დაბრუნებისას სხვა ჩატი გაქვთ გახსნილი, შედეგი იგდება და არა მცდარ ადგილას ჩანს.
- წარუმატებელი შეჯერება ხელახლა ცდება. ცუდ კავშირზე გაღვიძებული ტელეფონი შეიძლება ციკლის დასრულებას შეამჩნევდეს, მაგრამ მის მიღებას ვერ შეძლებდეს. ეს ახლა მახსოვრდება, და ჩატი ისევ ითხოვს, როცა ტაბი ხელახლა გამოჩნდება ან ქსელი დაბრუნდება.
- „მუშაობდა“ წერს სიმართლეს. თითო პასუხი აჩვენებს, რამდენ ხანს მუშაობდა აგენტი. თუ ტაბმა სერვერის ციკლის დასრულების შეტყობინება ვერ ნახა, ის ამ დროს საკუთარი საათიდან ავსებდა — ის იზომებოდა გაგზავნიდან ტელეფონის გაღვიძებამდე, მათ შორის მოშორებით გატარებულ დროსაც. ეს ციფრი ახლა შეფასებად არის მონიშნული და ისტორიის მიღებისთანავე ინახული ხანგრძლივობით იცვლება.
რა ავიღეთ ამ ამბიდან
- იტესტეთ მოწყობილობაზე, რომელსაც ხალხი რეალურად იყენებს, იმ გზით, როგორითაც ის იყენებს. ორივე შეცდომა არსებობდა უფსკრულში „სტრიმი, რომელიც მუშაობს“ და „ტელეფონი ჯიბეში“ შორის.
- სარეზერვო გზა, რომელიც არასდროს მუშაობს, სარეზერვო არ არის. შეჯერების ნაბიჯი სწორედ ამ შემთხვევისთვის არსებობდა და ჩუმად გამოტოვებდა.
- გაიმეორეთ აღდგენაც. ტელეფონის გაღვიძების მომენტი ხშირად იმ დროსაა, როცა მისი კავშირი ყველაზე ცუდია.
- გამოცნობა ფაქტად არ წარმოადგინოთ. ხანგრძლივობა არასწორი საათიდან უარესია, ვიდრე არანაირი; აღნიშნეთ ან შეცვალეთ.
იგივე სამუშაომ ასევე გააკეთა რამდენიმე წვრილმანი, რასაც ციკლის გაშვებისას ხედავთ: shell ნაბიჯები ეწერება ბრძანებით, რომელიც რეალურ სამუშაოს ასრულებს, და არა cd-ით; ჩატის სკრინშოტები ინახავს გვერდის ზედა-მარცხენა კუთხეს და ეტევა სვეტში; ახალი პროექტი თავის გენერირებულ სახელს გვერდის განახლების გარეშე იღებს.
თუ თქვენი აპი ტელეფონებისთვის აშენებთ, ჩვენი გიდები მობილურ-მეგობრული ვებ აპის აშენების და ნატიური აპებისა და პროგრესული ვებ აპების შესახებ ძირითადს ფარავს. ჩატის შესახებ მეტი ჩატის დოკუმენტაციაშია.