Blog

Telefon Uyuduğunda Sohbeti Canlı Tutmak

Mythex’in agenti tek bir istek için dakikalarca çalışabilir ve siz muhtemelen bir telefondan izliyor olabilirsiniz; telefon kilitlenir, uygulama değiştirir, ağ değiştirir. Bunu bozan iki hata vardı. Birinde sohbet “sayfa yeniden görünür oldu” sinyalinin her seferinde bağlantının koptuğunun kanıtı olduğunu varsayıyor ve “Bağlanılıyor…” ekranında döngüye giriyordu. Diğerinde, yeni bir sohbetin ilk yanıtı sırasında uyuyan bir telefon, yanıtın yalnızca ilk birkaç parçasıyla geri dönüyordu; elle yenileme yapılana kadar. İkisi de düzeltildi.

Sohbet çalışan bir turu nasıl takip eder

Agent çalışırken sohbet sunucularımızdan bir akış açık tutar: her adım — bir düşünce, bir araç çağrısı, yanıtın bir parçası — bir olay olarak gelir. Akış koparsa sohbet yeniden bağlanır ve sunucu, son 120 saniyeyi tutan bir tampondan yakın zamandaki olayları yeniden oynatır. Tur bittiğinde sohbet ayrıca sunucudan kaydedilmiş geçmişi ister ve gösterdiklerini kaydedilenlerle uzlaştırır. Bu son adım, akışın kaçırdığı her şeyi yakalar.

Hiçbir şey olmazken canlı bir bağlantıyı ölü olandan ayırt etmek için sunucu her 15 saniyede bir küçük bir “ping” gönderir.

Hata 1: uyanmak sağlıklı bir akışı öldürdü

Tarayıcılar, bir sayfa yeniden görünür olduğunda ona haber verir: sekme değiştirildiğinde, ekran açıldığında. Bunu bağlantıyı kontrol etmek için bir ipucu olarak kullanıyorduk — pratikte akışı kesip yeniden bağlanmak, bu sırada öldüğünü varsayarak.

Telefonlarda ve gömülü tarayıcılarda bu olaylar, akışların ölmesinden çok daha sık tetiklenir — her sekme değişiminde, her ekran açılışında, bazı gömülü tarayıcılarda birkaç saniyede bir. Her biri sağlıklı bir akışı iptal ediyordu. Sohbet yeniden bağlanıyor, tekrar oynatılıyor, yine iptal ediliyor ve “Bağlanılıyor…” ekranında kalıyordu. Sonra agent hâlâ çalışırken turun bittiğini söylüyordu.

Çözüm: akışı konuşup konuşmadığına göre değerlendir

Sohbet artık her projenin akışının en son ne zaman herhangi bir şey aldığını kaydeder — hem olaylar hem de 15 saniyelik pingler. “Yeniden görünür” sinyali yalnızca 25 saniye boyunca sessiz kalmış bir akışı iptal eder: ping aralığı artı yavaş bir ağ atlamasından daha uzun, böylece canlı bir akış asla bu duruma girmez. Testler, bir pingin bir yaşam belirtisi sayıldığını ve yeni ping atmış bir akışın ölü sayılmadığını doğrular.

Bundan çıkardığımız kural: bir sayfanın görünürlüğü sayfa hakkında bir şey söyler, ağ bağlantısı hakkında değil. Bağlantıya sorun.

Hata 2: telefon uyandıktan sonra yarım yanıt

Bunu iOS simülatöründe her seferinde yeniden üretebildik:

  1. Yeni bir sohbet başlatın ve uzun süren bir istek gönderin.
  2. Telefonun derleme boyunca uyumasına izin verin.
  3. Tur bittikten ve iki dakikalık yeniden oynatma tamponunun süresi dolduktan sonra geri dönün.

Sohbet, yanıtın ilk birkaç bloğunu tamamlanmış olarak gösterdi — ve sayfayı yenileyene kadar böyle kaldı.

Neden

Yeni bir sohbetin, ilk mesaj onu oluşturana kadar bir “thread”i — kaydedilmiş konuşması — yoktur. Bu, gönderme fonksiyonunun içinde gerçekleşir; uzlaştırma adımını zaten yakaladıktan sonra ve o adım hâlâ thread olmadığını düşünüyordu. Bu yüzden yeni bir sohbetteki ilk turun sonunda uzlaştırma thread olmadığını gördü ve hiçbir şey istemeden sessizce döndü.

Genellikle kimse fark etmiyordu, çünkü akış tüm turu zaten iletmişti. Ama turu uyuyarak kaçıran ve 120 saniyelik yeniden oynatma tamponunun süresi dolduktan sonra dönen bir telefon, eksik olayları akıştan alamıyordu — ve boşluğu doldurması gereken uzlaştırma hiç çalışmamıştı.

Düzeltme

  • Gönderme, uzlaştırmaya turun hangi thread’e ait olduğunu söyler, böylece yeni bir sohbetin ilk turu diğerleri gibi uzlaştırılır. Yanıt geldiğinde başka bir sohbeti açmışsanız, sonuç yanlış yerde gösterilmek yerine atılır.
  • Başarısız bir uzlaştırma yeniden denenir. Kötü bir bağlantıda uyanan bir telefon, turun bittiğini ama onu getirmenin başarısız olduğunu görebilir. Bu artık hatırlanır ve sekme yeniden gösterildiğinde ya da ağ geri geldiğinde sohbet yeniden sorar.
  • “Çalışma süresi” dürüsttür. Her yanıt, agentin ne kadar çalıştığını gösterir. Sekme sunucunun tur sonu mesajını hiç görmediyse, bu değer kendi saatinden doldurulurdu — Gönder’den telefonun uyanmasına kadar geçen süre, uzaklıktaki zaman dahil. Bu rakam artık tahmin olarak işaretlenir ve geçmiş geldiğinde kaydedilmiş süreyle değiştirilir.

Bundan çıkardıklarımız

  • İnsanların kullandığı cihazda, kullandıkları şekilde test edin. İki hata da “çalışan bir akış” ile “cebinde bir telefon” arasındaki boşlukta yaşıyordu.
  • Hiç çalışmayan bir yedek, yedek değildir. Uzlaştırma adımı tam bu durumu yakalamak için vardı ve bu durumu sessizce atlıyordu.
  • Kurtarma adımını da yeniden deneyin. Telefonun uyandığı an, çoğu zaman bağlantısının en kötü olduğu andır.
  • Tahmini gerçek gibi göstermeyin. Yanlış saatten gelen bir süre hiç olmamasından daha kötüdür; etiketleyin ya da yerine gerçek olanı koyun.

Aynı çalışma, bir tur sürerken göreceğiniz birkaç şeyi de düzenledi: kabuk adımları cd yerine asıl işi yapan komutla etiketleniyor, sohbetteki ekran görüntüleri sayfanın sol üst kısmını korur ve sütuna sığar, yeni bir proje da yenileme yapmadan üretilen adını alır.

Kendi telefonlar için uygulamanızı yapıyorsanız, mobil uyumlu bir web uygulaması nasıl geliştirilir ve native ile progressive web uygulamaları rehberleri temelleri anlatır. Sohbetin kendisi hakkında daha fazlası sohbet dokümanlarında.

Mythex · Pricing · Yapay zekayla her şeyi yapın · Web sitesi ve uygulama şablonları · Mythex karşılaştırmaları · Yapay zekayla uygulama geliştirme sözlüğü · Yapay zekayla uygulama geliştirme için ücretsiz araçlar · 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 Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)