ఫోన్ నిద్రపోయినప్పుడు చాట్ను సజీవంగా ఉంచడం
Mythex ఏజెంట్ ఒక అభ్యర్థన కోసం నిమిషాల పాటు పని చేయగలదు, మరియు మీరు ఫోన్ నుండి చూస్తూ ఉండవచ్చు — అది పని చేస్తున్నప్పుడు ఫోన్ లాక్ అవుతుంది, యాప్లు మారుస్తుంది, నెట్వర్క్ మారుస్తుంది. రెండు బగ్లు దీనిని విఫలం చేశాయి. ఒకదానిలో, చాట్ ప్రతి “పేజ్ మళ్లీ కనిపిస్తోంది” సంకేతాన్ని కనెక్షన్ చచ్చిపోయిందనడానికి రుజువుగా తీసుకుని, “Connecting…” పై ఇరుక్కుపోయే వరకు లూప్ అయింది. మరొకదానిలో, కొత్త చాట్ మొదటి సమాధానాన్ని నిద్రపోయిన ఫోన్ కేవలం మొదటి కొన్ని ముక్కలుగా మాత్రమే తిరిగి పొందింది, మాన్యువల్ రిఫ్రెష్ వరకు. రెండూ పరిష్కరించబడ్డాయి.
చాట్ నడుస్తున్న టర్న్ను ఎలా అనుసరిస్తుంది
ఏజెంట్ పని చేస్తున్నప్పుడు, చాట్ మా సర్వర్ల నుండి ఒక స్ట్రీమ్ తెరిచి ఉంచుతుంది: ప్రతి అడుగు — ఒక ఆలోచన, ఒక టూల్ కాల్, సమాధానంలో ఒక ముక్క — ఒక ఈవెంట్గా వస్తుంది. స్ట్రీమ్ పడిపోతే, చాట్ మళ్లీ కనెక్ట్ అవుతుంది, మరియు సర్వర్ గత 120 సెకన్ల ఈవెంట్లను బఫర్ నుండి మళ్లీ పంపుతుంది. టర్న్ ముగిసినప్పుడు, చాట్ సర్వర్ను సేవ్ చేసిన చరిత్ర కూడా అడుగుతుంది, మరియు అది చూపించిన దానిని నిల్వ చేసిన దానితో సరిపోల్చుతుంది. ఆ చివరి అడుగు స్ట్రీమ్ మిస్ చేసిన దాన్ని పట్టుకుంటుంది.
ఏమీ జరగనప్పుడు కనెక్షన్ బతికే ఉందో లేదో తెలుసుకోవడానికి, సర్వర్ ప్రతి 15 సెకన్లకు చిన్న “ping” పంపుతుంది.
బగ్ 1: మేల్కొనడం ఆరోగ్యకరమైన స్ట్రీమ్ను చంపింది
బ్రౌజర్లు పేజీకి అది మళ్లీ కనిపిస్తోందని చెబుతాయి: ట్యాబ్ మారినప్పుడు, స్క్రీన్ అన్లాక్ అయినప్పుడు. మేము దానిని కనెక్షన్ తనిఖీ చేయడానికి సంకేతంగా వాడాం — ఆచరణలో, స్ట్రీమ్ను రద్దు చేసి మళ్లీ కనెక్ట్ చేయడానికి, అది దాగి ఉన్నప్పుడు చచ్చిపోయిందని భావించి.
ఫోన్లలో మరియు ఎంబెడెడ్ బ్రౌజర్లలో, ఈ ఈవెంట్లు స్ట్రీమ్లు చచ్చిపోవడం కంటే చాలా ఎక్కువసార్లు జరుగుతాయి — ప్రతి ట్యాబ్ మార్పు, ప్రతి అన్లాక్, మరియు కొన్ని ఎంబెడెడ్ బ్రౌజర్లలో ప్రతి రెండు సెకన్లకో అంతకు దగ్గరగా. ప్రతిదీ సరిగ్గా ఉన్న స్ట్రీమ్ను రద్దు చేసింది. చాట్ మళ్లీ కనెక్ట్ అయి, రీప్లే చేసి, మళ్లీ రద్దయి, చివరికి “Connecting…” పై కూర్చుంది. ఆ తర్వాత ఏజెంట్ ఇంకా పని చేస్తుండగానే టర్న్ ముగిసిందని చెప్పింది.
పరిష్కారం: స్ట్రీమ్ మాట్లాడుతోందా అన్నదాన్ని బట్టి తీర్పు
చాట్ ఇప్పుడు ప్రతి ప్రాజెక్ట్ స్ట్రీమ్ చివరిసారిగా ఏదైనా అందుకున్నది ఎప్పుడో రికార్డ్ చేస్తుంది — ఈవెంట్లు మరియు 15 సెకన్ల pingలు రెండూ. “మళ్లీ కనిపిస్తోంది” సంకేతం 25 సెకన్లుగా నిశ్శబ్దంగా ఉన్న స్ట్రీమ్ను మాత్రమే రద్దు చేస్తుంది: ping వ్యవధి మరియు నెమ్మదైన నెట్వర్క్ హాప్ కంటే ఎక్కువ, కాబట్టి జీవించి ఉన్న స్ట్రీమ్ ఎప్పుడూ అర్హత పొందదు. ఒక ping జీవిత సంకేతంగా లెక్కించబడుతుందని, మరియు ఇప్పుడే ping చేసిన స్ట్రీమ్ చచ్చిపోయినట్లు పరిగణించబడదని పరీక్షలు తనిఖీ చేస్తాయి.
మేము దీని నుండి తీసుకున్న నియమం: పేజీ కనిపించడం పేజీ గురించి చెబుతుంది, నెట్వర్క్ కనెక్షన్ గురించి కాదు. కనెక్షన్నే అడగండి.
బగ్ 2: ఫోన్ మేల్కొన్న తర్వాత సగం సమాధానం
ఇది iOS సిమ్యులేటర్లో ప్రతిసారీ పునరుత్పత్తి చేయగలిగాం:
- కొత్త చాట్ ప్రారంభించి, కొంత సమయం పట్టే అభ్యర్థన పంపండి.
- బిల్డ్ అంతా ఫోన్ నిద్రపోనివ్వండి.
- టర్న్ ముగిసిన తర్వాత, రెండు నిమిషాల రీప్లే బఫర్ గడువు ముగిసిన తర్వాత తిరిగి రండి.
చాట్ సమాధానం యొక్క మొదటి కొన్ని బ్లాక్లను పూర్తయినవిగా గుర్తించి చూపించింది — మరియు మీరు పేజీని రిఫ్రెష్ చేసే వరకు అలాగే ఉంది.
ఎందుకు
కొత్త చాట్కు మొదటి సందేశం ఒక దానిని సృష్టించే వరకు థ్రెడ్ — అంటే సేవ్ చేయబడిన సంభాషణ — ఉండదు. అది send ఫంక్షన్ లోపల జరుగుతుంది, send ఇప్పటికే reconcile దశను పట్టుకున్న తర్వాత, ఇది ఇంకా థ్రెడ్ లేదని భావించేది. కాబట్టి కొత్త చాట్లో మొదటి టర్న్ ముగింపులో, reconcile థ్రెడ్ లేదని చూసి ఏమీ అడగకుండా నిశ్శబ్దంగా తిరిగింది.
సాధారణంగా ఎవరూ గమనించలేదు, ఎందుకంటే స్ట్రీమ్ మొత్తం టర్న్ను ఇప్పటికే అందించింది. కానీ టర్న్ అంతా నిద్రపోయిన ఫోన్, 120 సెకన్ల రీప్లే బఫర్ గడువు ముగిసిన తర్వాత తిరిగి వచ్చినప్పుడు, స్ట్రీమ్ నుండి తప్పిపోయిన ఈవెంట్లను పొందలేకపోయింది — మరియు ఆ గ్యాప్ను నింపాల్సిన reconcile ఎప్పుడూ నడవలేదు.
పరిష్కారం
- Send, reconcile కు ఈ టర్న్ ఏ థ్రెడ్కు చెందుతుందో చెబుతుంది, కాబట్టి కొత్త చాట్ యొక్క మొదటి టర్న్ ఇతరాల్లాగే reconcile అవుతుంది. సమాధానం వచ్చేలోపు మీరు వేరే చాట్ తెరిచి ఉంటే, ఫలితం తప్పు చోట చూపకుండా వదిలేయబడుతుంది.
- విఫలమైన reconcile మళ్లీ ప్రయత్నించబడుతుంది. చెడు కనెక్షన్లో మేల్కొన్న ఫోన్, టర్న్ ముగిసిందని కనుగొని, దానిని తెచ్చుకోవడంలో విఫలం కావచ్చు. అది ఇప్పుడు గుర్తుంచుకోబడుతుంది, మరియు ట్యాబ్ మళ్లీ కనిపించినప్పుడు లేదా నెట్వర్క్ తిరిగి వచ్చినప్పుడు చాట్ మళ్లీ అడుగుతుంది.
- “Worked for” నిజాయితీగా ఉంది. ప్రతి సమాధానం ఏజెంట్ ఎంతసేపు పనిచేసిందో చూపుతుంది. ట్యాబ్ సర్వర్ యొక్క ముగింపు సందేశాన్ని ఎప్పుడూ చూడకపోతే, అది తన స్వంత గడియారం నుండి ఆ సమయాన్ని నింపేది — అది Send నుండి ఫోన్ మేల్కొనే వరకు నడిచేది, దూరంగా ఉన్న సమయంతో సహా. ఆ లెక్క ఇప్పుడు అంచనాగా గుర్తించబడుతుంది, మరియు చరిత్ర వచ్చాక నిల్వ చేసిన వ్యవధితో భర్తీ చేయబడుతుంది.
మేము నేర్చుకున్నది
- ప్రజలు నిజంగా ఉపయోగించే పరికరంలో, వారు ఉపయోగించే విధంగా పరీక్షించండి. రెండు బగ్లూ “పని చేసే స్ట్రీమ్” మరియు “జేబులో ఉన్న ఫోన్” మధ్య గ్యాప్లోనే ఉన్నాయి.
- ఎప్పుడూ నడవని ఫాల్బ్యాక్ ఫాల్బ్యాక్ కాదు. reconcile దశ సరిగ్గా ఈ కేసును పట్టుకోవడానికే ఉంది, మరియు అది నిశ్శబ్దంగా దాటవేసింది.
- రికవరీని కూడా మళ్లీ ప్రయత్నించండి. ఫోన్ మేల్కొనే క్షణం తరచుగా దాని కనెక్షన్ అత్యంత చెత్తగా ఉండే సమయం.
- ఊహను వాస్తవంగా చూపవద్దు. తప్పు గడియారం నుండి వచ్చిన వ్యవధి ఏమీ లేకపోవడం కంటే ఘోరం; దానికి లేబుల్ వేయండి, లేదా భర్తీ చేయండి.
అదే పని టర్న్ నడుస్తున్నప్పుడు మీరు చూసే కొన్ని విషయాలను కూడా చక్కబెట్టింది: షెల్ దశలు cd కు బదులుగా అసలు పనిచేసే కమాండ్ పేరుతో లేబుల్ చేయబడతాయి, చాట్లోని స్క్రీన్షాట్లు పేజీ పై-ఎడమ భాగాన్ని ఉంచి కాలమ్లో సరిపోతాయి, మరియు కొత్త ప్రాజెక్ట్ రిఫ్రెష్ లేకుండానే దాని ఉత్పత్తి పేరును తీసుకుంటుంది.
ఫోన్ల కోసం మీ స్వంత యాప్ నిర్మిస్తుంటే, మొబైల్-స్నేహపూర్వక వెబ్ యాప్ నిర్మించడం మరియు నేటివ్ vs ప్రోగ్రెసివ్ వెబ్ యాప్లు గైడ్లు మూలాలను కవర్ చేస్తాయి. చాట్ గురించి మరింత chat docs లో ఉంది.