2010-07-21 17 views
5

कुछ हद तक भ्रमित शीर्षक के लिए खेद है। निश्चित रूप से यह शीर्षक नहीं है कि वास्तव में कैसे शीर्षक है। मेरी स्थिति यह है- मेरे पास एक अकादमिक सिमुलेशन टूल है, कि मैं एक वेब फ्रंट एंड के विकास की प्रक्रिया में हूं। जबकि सी ++ - आधारित सिम्युलेटर छोटे प्रणालियों के लिए (एक दूसरे क्रम का दसवां हिस्सा करने के लिए कई सैकड़ा) computationally काफी कुशल है, यह डेटा की एक महत्वपूर्ण (वेब ​​अनुप्रयोग संदर्भ में) राशि उत्पन्न कर सकते हैं (~ 4-6MB)।सर्वर-साइड सिमुलेशन के लिए बड़े डेटा सेट को कैसे प्रबंधित करें -> क्लाइंट ब्राउज़र

वर्तमान सेटअप इस प्रकार

  1. उपयोगकर्ता index.html फ़ाइल में पहुंचता है। बाईं ओर इस पृष्ठ पर एक इंटरैक्टिव फॉर्म है जहां उपयोगकर्ता सिमुलेशन पैरामीटर इनपुट कर सकता है। दाएं तरफ सिमुलेशन डेटा के विभिन्न भूखंडों के लिए कुछ ग्रेड आउट टैब के साथ, वे सिस्टम बना रहे हैं, इसका एक प्रतिनिधित्व है।
  2. उपयोगकर्ता क्लिक करता है "रन सिमुलेशन।" यह अनुरोध किए गए सिम पैरामीटर को एक AJAX कॉल के माध्यम से runSimulation.php फ़ाइल में सबमिट करता है। runSimulation.php सबमिट किए गए डेटा के आधार पर एक इनपुट फ़ाइल बनाता है, फिर इस इनपुट फ़ाइल का उपयोग कर सिम्युलेटर चलाता है। सिम्युलेटर विभिन्न आउटपुट फ़ाइलों में 4-6 एमबी डेटा निकाल देता है।
  3. एक बार सिमुलेशन चल किया जाता है, ब्राउज़र के जवाब एक और जावास्क्रिप्ट समारोह, जिसके कारण फ़ाइल returnData.php कॉल है। यह PHP स्क्रिप्ट जेएसओएन डेटा के रूप में आउटपुट फ़ाइलों में डेटा संकुल करता है, जेएसओएन डेटा ब्राउज़र पर देता है, फिर डेटा फ़ाइलों को हटा देता है।
  4. यह प्रतिक्रिया डेटा तो ब्राउज़र की जावास्क्रिप्ट में कुछ साजिश रचने वस्तुओं के लिए तंग आ गया है, और साजिश टैब सक्रिय हो जाते हैं। उपयोगकर्ता प्लॉट किए गए डेटा को खोल और बातचीत कर सकता है।

इस सेटअप ठीक काम कर रहा है, फिर भी मैं दो मुद्दों में चला रहा हूँ:

  • वापसी डेटा वापस आ रहा लोड करने के लिए कुछ समय लग सकता डेटा की धीमी गति 4-6MB है। (यह डेटा gzipped किया जा रहा है, जो काफी अपने पक्ष को कम कर देता है, लेकिन यह अभी भी एक धीमी कनेक्शन पर 20 सेकेंड लग सकते हैं)
  • अगले लक्ष्य उपयोगकर्ता एकाधिक सिमुलेशन रन प्लॉट करने के लिए इतना है कि वे परिणामों की तुलना कर सकते हैं अनुमति है।

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

हालांकि, मैं सोच की इस पंक्ति मैं कैसे पहचाना (php में) है कि उपयोगकर्ता सर्वर छोड़ दिया है के साथ एक बड़ी समस्या होती है और डेटा भी हटाएं? मैं नहीं चाहता कि उपयोगकर्ता मशीन पर ड्राइव स्पेस ले लें। इस तरह के वेब ऐप के लिए सर्वोत्तम प्रथाओं पर कोई विचार?

उत्तर

1

समस्या # 1 के लिए, आपके पास वास्तव में कोई विकल्प नहीं है। आप पहले ही डेटा को गजिप कर रहे हैं, और जेएसओएन का उपयोग कर रहे हैं, जो अपेक्षाकृत हल्के प्रारूप है। 4 ~ 6 एमबी डेटा वास्तव में बहुत है। बीटीडब्ल्यू अगर आपको लगता है कि PHP डेटा उत्पन्न करने में बहुत अधिक समय ले रहा है, तो आप डेटा उत्पन्न करने और PHP का उपयोग करके इसे सेवा देने के लिए अपने सी ++ प्रोग्राम का उपयोग कर सकते हैं। ऐसा करने के लिए आप exec() का उपयोग कर सकते हैं।

हालांकि, मुझे यकीन है कि कैसे अपने सिमुलेशन काम नहीं हूँ, लेकिन जावास्क्रिप्ट, एक ट्यूरिंग-पूर्ण भाषा है, इसलिए आप संभवतः क्लाइंट की तरफ इस डेटा (जो भी अधिक समझ में आता है) में से कुछ/सबसे/सब उत्पन्न कर सकता है। इस मामले में, आप बहुत सारे बैंडविड्थ को बचाएंगे और लोडिंग समय को काफी कम करेंगे - लेकिन ध्यान रखें कि जेएस वास्तव में धीमा हो सकता है।

समस्या # 2 के लिए, यदि आप सर्वर पर डेटा छोड़ते हैं तो आपको सक्रिय सत्रों का ट्रैक रखना होगा (यानी: पिछली बार जब सर्वर सर्वर से इंटरैक्ट किया गया था), और एक टाइमआउट सेट करें जो समझ में आता है आपका आवेदन। टाइमआउट के बाद, आप डेटा हटा सकते हैं।

बातचीत का ट्रैक रखने के लिए, आप यह जांचने के लिए जेएस का उपयोग कर सकते हैं कि कोई उपयोगकर्ता सक्रिय है या नहीं (heartbeats या ऐसा कुछ भेजकर)।

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