2009-08-26 6 views
5

मैं एक चैट एप्लिकेशन बना रहा हूं जो सर्वर से क्लाइंट तक "पुश" अनुकरण करने के लिए लंबे मतदान के साथ काम करता है।टाइमआउट प्राप्त किए बिना ब्राउज़र की प्रतिक्रिया देने से पहले मैं कितना सुरक्षित इंतजार कर सकता हूं?

मूल रूप से, ब्राउज़र अपडेट के लिए पूछता है, और अगर कुछ नया है तो मैं जवाब देता हूं। अन्यथा, जब तक कि वापस भेजने के लिए कुछ न हो, तब तक कनेक्शन बिना प्रतिक्रिया के खुलता रहता है।

अब, अगर 30 सेकंड बीत चुके हैं और मैंने कुछ भी नहीं भेजा है, तो मैं मूल रूप से "नोन्यूज" कहकर प्रतिक्रिया भेजता हूं, और ग्राहक फिर से मतदान करेंगे।

मैं जो करना चाहता हूं वह स्पष्ट रूप से इस कनेक्शन को यथासंभव लंबे समय तक उत्तर देने के बिना रखता है, ब्राउज़र से बस समय समाप्त हो जाएगा और मुझे छोड़ देगा ... मुझे क्लाइंट टाइमआउट पर अच्छा दस्तावेज नहीं मिला है प्रत्येक ब्राउज़र के लिए है, और ऐसा लगता है कि यह उन सभी के लिए समान नहीं है ...

क्या आप में से कोई भी लंबे समय तक मतदान कर रहा है?
कोई भी विचार जो सबसे लंबा सुरक्षित टाइमआउट हो सकता है?

धन्यवाद!

उत्तर

2

ब्राउज़र को एक्सएचआर पर एक टाइमआउट पता लगाना चाहिए और दूसरा अनुरोध करना चाहिए।

अद्यतन:

का पता लगा रहा एक एक्सएचआर पर समय समाप्ति वास्तव में जटिल है, के बाद से यह निर्मित नहीं कर रहा है किसी कारण से। बेशक आप भी .. 502/503 प्रतिक्रियाओं, आदि को संभालने के लिए की आवश्यकता होगी

+0

दिलचस्प, मैं यह कैसे कर सकता हूं? इसके अलावा, क्या सर्वर इसका पता लगा सकता है? (एएसपी.Net 2.0) मुझे पता है कि मैं तकनीकी रूप से जांच सकता हूं कि क्लाइंट अभी भी जुड़ा हुआ है, लेकिन क्या यह 100% सटीक है? मेरी चिंता यह दौड़ की स्थिति है: क्लाइंट टाइमआउट करेगा, उपयोगकर्ता के लिए एक संदेश आएगा, सर्वर इसे उस कनेक्शन पर भेज देगा जिसके पास हैंडल है, संदेश कहीं भी नहीं जाता है क्योंकि यह ग्राहक में समय समाप्त हो गया है, क्लाइंट द्वारा किए गए नए अनुरोध में एक खाली संदेश कतार उनके लिए इंतजार कर रही है, और संदेश खो गया है ... –

+0

सर्वर की तरफ, सॉकेट पर लिखने का प्रयास करते समय एक टाइम-आउट कनेक्शन त्रुटि उत्पन्न करेगा। निश्चित रूप से आप इसका पता लगाते हैं कि आप जिस सर्वर-साइड तकनीक का उपयोग कर रहे हैं, उस पर निर्भर करता है, और मैं एएसपी.Net से बहुत परिचित नहीं हूं। संभावना है, Response.Write (या जो कुछ भी अब है) किसी प्रकार की त्रुटि उत्पन्न करेगा। क्लाइंट-साइड, आपको कुछ अतिरिक्त काम करने की आवश्यकता होगी, मैंने कुछ जवाबों के साथ अपना उत्तर अपडेट कर लिया है जो आपको उपयोगी मिल सकती है। –

+0

जब आप संदेश प्राप्त करते हैं तो ग्राहक क्लाइंट को एसीके भेज सकता है। इस प्रकार यदि आप एक संदेश वापस भेजते हैं और कोई पावती नहीं करते हैं, तो इसे फिर से कनेक्ट होने तक कतार में छोड़ दें। – kibibu

1

पढ़ने टाइमआउट ब्राउज़र में अलग-। उदाहरण के लिए, ये IE के लिए डिफ़ॉल्ट मान हैं,

Internet Explorer 4.0 and Internet Explorer 4.01 - 5 minutes 
Internet Explorer 5.x and Internet Explorer 6.x - 60 minutes 
Internet Explorer 7 and Internet Explorer 8 - 60 minutes 

जैसा कि आप देख सकते हैं, यह बड़ा ओवरटाइम हो जाता है।

लंबे मतदान में, टाइमआउट आपका मित्र है। इससे बचने के बजाय आपको इसका लाभ उठाना चाहिए। टाइमआउट का मतलब है कि आप ब्राउज़र के साथ लंबे समय तक मतदान कर रहे हैं। टाइमआउट एक त्रुटि है जिसे आपको लंबे मतदान के बिना भी संभालना है, इसलिए कोई अतिरिक्त बोझ नहीं है।

आप इस सवाल का मेरी प्रतिक्रिया पढ़ने के लिए चाहते हो सकता,

polling a HTTP server from J2ME client

भले ही यह एक मोबाइल ग्राहक के लिए है, सबसे नियमों AJAX लंबे मतदान भी लागू होते हैं। विशेष रूप से, मुझे लगता है कि आपको अधिसूचना प्रणाली से लाभ होगा, इसलिए मतदान के लिए केवल मतदान सूचना का उपयोग किया जाता है और सभी सामग्री सामान्य रूप से खींची जाती है।

+0

उत्तर के लिए धन्यवाद, यह बहुत दिलचस्प है ... आपको कहां मिला IE के लिए उन टाइमआउट मान? मुझे ऐसा कुछ भी नहीं मिला ... यदि यह वास्तव में सच है, तो मेरा आवेदन आईई 7/8 में सही काम नहीं करेगा, क्योंकि मेरा वर्तमान सामान्य समय प्रतीक्षा करने के लिए 30 सेकंड + थोड़ा ओवरहेड है ... –

+0

http://support.microsoft.com/kb/181050 –

+1

+1 देखें, 30s है जहां आप परेशानी में चलना शुरू करते हैं। ओपेरा भी, यहां चारों ओर सीमा हिट करता है। संभावित मामूली मतभेदों से बचने के लिए हम वेबसिंक में 25s का उपयोग करते हैं। – jvenema

संबंधित मुद्दे

 संबंधित मुद्दे