2012-03-06 14 views
10

क्या एक पृष्ठ पर एक वेबसाईट खोलने का एक तरीका है और उसके बाद प्रत्येक पृष्ठ लोड के बाद एक नई वेबसाइट खोलने के बजाय इसे किसी अन्य पृष्ठ पर (उसी टैब के भीतर, एक लिंक पर क्लिक करने के बाद) का पुन: उपयोग करें? ब्राउज़र स्टोरेज एक खुली सॉकेट पर पकड़ने में सक्षम है?पृष्ठों के बीच websockets का उपयोग कर रहे हैं?

इसका उद्देश्य प्रति उपयोगकर्ता (या टैब) में एक वेबस्केट को रखने में सक्षम होना है और गैर-पारंपरिक तरीके से पृष्ठों के बीच स्थानांतरित करने की आवश्यकता के बिना ऐसा करना बहुत अच्छा होगा, उदाहरण के लिए सामग्री को एक div में उपयोग करना प्रत्येक बार जब उपयोगकर्ता पृष्ठ के साथ इंटरैक्ट करता है तो जावास्क्रिप्ट।

+1

जब कोई वेबसाइकिल कनेक्शन बनाया जाता है तो कुछ राज्य मौजूद होता है जो कनेक्शन के दोनों किनारों को कनेक्शन के अस्तित्व के लिए ट्रैक रखना चाहिए। मुझे लगता है कि अगर आपने स्थानीय स्टोरेज में कनेक्शन के क्लाइंट साइड स्टेटस को संग्रहीत किया है (ध्यान दें कि वेबसाईट सिस्टम का क्लाइंट साइड संशोधित किया जाना चाहिए ताकि यह सबसे अधिक या यहां तक ​​कि सभी वेबसाईट क्लाइंट इस तक इसका समर्थन न करें, जहां तक ​​मुझे पता है), हो सकता है कि आप कनेक्शन को बाद में या किसी अन्य पृष्ठ पर फिर से खोल सकें (जब तक सर्वर ने राज्य का अपना आधा हिस्सा नहीं छोड़ा हो)। तो यह संभव होना चाहिए लेकिन कैसे? मैं एक कामकाजी नमूना देखना चाहता हूँ। –

+0

मुझे लगता है कि वेबसाकेट को फिर से बनाना "सर्वर को भी इसका समर्थन करना होगा। या अधिक विशेष रूप से पुस्तकालय सर्वर पर websocket समर्थन को लागू करने के लिए प्रयोग किया जाता है। मुझे संदेह है कि सर्वर पर अधिकतर कार्यान्वयन वेबसाइकिल को घुमाएंगे जब यह पता चला कि अंतर्निहित टीसीपी कनेक्शन बंद था - हालांकि आपके द्वारा सुझाए गए क्लाइंट में किए गए परिवर्तन _could_ इसे खोलते हैं। –

+3

यूप, ** एक वेबस्केट कनेक्शन ट्रांसपोर्ट के रूप में बनाए गए टीसीपी कनेक्शन को लाइव नहीं करता है **, ठीक है, मैंने सोचा कि वे चतुर थे। –

उत्तर

7

उत्तर कोई है।

भले ही सॉकेट को mySocket.close(); पर कॉल करके स्पष्ट रूप से बंद नहीं किया गया हो, तो सॉकेट को पुनः लोड पर ब्राउज़र द्वारा बंद कर दिया जाएगा।

मैंने स्थानीय सॉकेट में वेब सॉकेट ऑब्जेक्ट को संग्रहीत करने और फिर डेटा पुनर्प्राप्त करने के लिए इसका उपयोग करने का प्रयास किया। लौटाई गई वस्तु मान्य है, लेकिन कनेक्शन अब और नहीं है। क्योंकि, जब पृष्ठ पुनः लोड होता है, तो सॉकेट को अपर्याप्त रूप से समाप्त कर दिया जाता है। सर्वर साइड पर

संदेश का कहना है:

[Errno 10053] An established connection was aborted by the software in your host machine 

ये लीजिए ...

+0

मैं उत्सुक था कि यदि आप स्थानीय स्टोरेज में कोई वेबस्केट (या संदर्भ) डालते हैं तो क्या होगा। कोशिश करने और रहस्य को सुलझाने के लिए धन्यवाद। –

2

साझा वेब कार्यकर्ता आपको एक ही मूल/साइट से लोड किए गए कई टैब के लिए वेबस्केट कनेक्शन साझा करने की अनुमति देंगे।

साझा वेब कार्यकर्ता केवल वर्तमान में Chrome, Safari, Opera पर समर्थित हैं।

+0

क्षमा करें, मेरा प्रश्न पर्याप्त स्पष्ट नहीं था। जब मैंने अलग-अलग पृष्ठों को कहा तो मुझे उसी टैब में निर्दिष्ट होना चाहिए था। मैंने आशा व्यक्त करने के लिए अपना प्रश्न संपादित कर लिया है। हालांकि, जाने के लिए धन्यवाद। –

+0

@ जोशुआ: आह, फिर आप वही बात पूछ रहे हैं जिसे मैंने थोड़ी देर पहले पूछा था: http://stackoverflow.com/questions/9336774/do-shared-web-workers-persist-across-a-single-page -रलोड-लिंक-नेविगेशन/933774 9 उस के लिए कोई निश्चित उत्तर नहीं है, मैं यह देखने के लिए किसी बिंदु पर परीक्षण करना चाहता हूं कि यह क्रोम/सफारी में काम करता है या नहीं। – kanaka

+0

हां, प्रश्नों के मुकाबले अन्य समान हैं जो शायद उम्मीद कर रहे थे कि हो सकता है कि वेबसाइकिलों के बारे में कुछ अलग हो, जिसका मतलब है कि मुझे एक अलग जवाब मिल सकता है। –

7

एक अलग दृष्टिकोण विभिन्न पृष्ठों पर सॉकेट के बजाय उपयोगकर्ता रखने के लिए किया जाएगा। इसका मतलब है कि आप क्लाइंट की आईडी को कुकी में जावास्क्रिप्ट के साथ स्टोर करते हैं, हर बार जब उपयोगकर्ता आपके किसी भी वेबसाइट पेज से एक नई सॉकेट खोलने का प्रयास करता है, तो आप इस आईडी को सर्वर पर भेजते हैं और फिर सर्वर को यह जानने का तरीका होता है कि यह नया कनेक्शन एक ही उपयोगकर्ता से है।

मैंने हाल ही में एक परियोजना में यह किया है और यह पूरी तरह से काम करता है :) आप जो करने की योजना बना रहे हैं उसके आधार पर, आप उपयोगकर्ता को अपने सर्वर पर अपने आईडी पर रख सकते हैं, या इसे किसी अन्य कुकी में स्टोर कर सकते हैं , या किसी साझा ऑब्जेक्ट में स्टोर करने के लिए ईवेंट का उपयोग फ्लैश!

+0

हां, यह पूरी तरह से संभव है, और एक पूरी तरह से वैध समाधान होता है (और हमने चर्चा की) लेकिन अंतर्निहित आर्किटेक्चर कुछ कार्यात्मक आवश्यकताओं को पूरा करने के लिए वेबस्केट पर निर्भर रहता है। निस्संदेह जो सॉकेट खोलने और बंद करने के कारण हुए थे, उन्हें कम किया जा सकता था, लेकिन आखिरकार यह तय किया गया कि सॉकेट को खुले और गतिशील रूप से यूआरएल की स्थान संपत्ति के आधार पर सामग्री को लोड करना बेहतर होगा। यकीन नहीं है कि यह बेहतर तरीका है लेकिन c'est la vie। –

+0

@WiMantis वेबसाइकिल के लिए कौन सा कनेक्शन प्रबंधक आप सर्वर पक्ष पर उपयोग कर रहे हैं? –

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