2013-03-26 8 views
5

मैं कैसे लांग मतदान काम करता है (उदाहरण के लिए, इस है, और इस के लिए) के बारे में जानकारी के बहुत सारे मिल सकते हैं, लेकिन कैसे कोड में इस लागू करने के लिए का कोई सरल उदाहरण।वसंत लम्बाई उदाहरण कोड?

असल में, मैं कैसे प्रयोग करेंगे अपाचे बिलाव अनुरोध का उत्तर देने के लिए, और कैसे मैं नए संदेशों के लिए एक सरल अनुप्रयोग (वसंत) जायें जो कि "लंबे समय से चुनाव" सर्वर लिखना चाहते हैं?

उदाहरण, मापनीय सुरक्षित या पूरा होने के लिए नहीं है, यह सिर्फ काम करने की जरूरत! अगर कोई मुझे ऐसा ट्यूटोरियल दे सकता है या किसी अन्य को संदर्भित कर सकता है तो मैं इसकी सराहना करता हूं।

उत्तर

3

यहाँ सबसे सरल उदाहरण के साथ मैं ...

नियंत्रक में आ सकता है:,

@RequestMapping("/longPolling") 
public String longPolling(Model model) { 
    while(true) { 
    // .. Do something, break when done... 
    if(somethingIsDone) { 
     break; 
    } 
    } 
    return "someResponse"; 
} 

देखें में इस कॉल करते समय और समय समाप्त पर सेटअप एक ajax कहेंगे, बस इसे दोबारा बुलाओ लंबे मतदान का विचार यह है कि सर्वर तब तक प्रतिक्रिया नहीं देता जब तक इसका जवाब देने के लिए कुछ न हो।

यदि आप स्प्रिंग 3.2 का उपयोग कर रहे हैं, तो बेहतर तरीका है, DeferredResult का उपयोग करना या अपने हैंडलर विधि से कॉल करने योग्य वापस करना है। यदि आप प्री-स्प्रिंग 3.2 हैं, तो ऐसे कई ढांचे हैं जिनका उपयोग आप वायुमंडल की तरह मदद के लिए कर सकते हैं, जो स्प्रिंग के साथ ठीक काम करता है। क्लाइंट-साइड कोडिंग को कम करने के लिए कुछ में जावास्क्रिप्ट भाग भी होते हैं।

+1

DeferredResult एक स्प्रिंग 3.2 है, और आप एक अलग प्रक्रिया के लिए बनाया DeferredResult बंद पारित करने के लिए अनुमति देता है। कॉल करने योग्य एक जावा क्लास है, जो रननेबल के समान है। प्रतिक्रिया को संभालने के लिए एक अलग प्रक्रिया को अनुमति देने के लिए कॉल करने योग्य को कार्यान्वित करना कठिन है, हालांकि असंभव नहीं है। यहाँ कैसे DeferredResult काम कर पाने के लिए पर एक काफी सभ्य ब्लॉग है: http://blog.springsource.org/2012/05/13/spring-mvc-3-2-preview-adding-long-polling-to-an-existing -वेब एप्लीकेशन/ – CodeChimp

0

पहले से ही विद्यमान anwser के आधार पर, नई सामग्री का उपयोग कर एक और अधिक कुशल "लंबे समय से मतदान" संस्करण के साथ सर्वलेट 3 एपीआई (बिलाव 7) और स्प्रिंग आ 3,2

@RequestMapping("/longPolling") 
public Future<String> longPolling(Model model) { 
    return callSomethingWhereAFutureReturns(); 
} 

बिंदु है: भविष्य ही है भविष्य में परिणामस्वरूप "एक सूचक" (इसे शाब्दिक रूप से प्राप्त न करें)। इसलिए, भविष्य के समाधान के बावजूद इस अनुरोध के लिए प्रेषण धागा उपरोक्त कोड को संभालने के बाद निलंबित/निकाला जाएगा। जब भविष्य का समाधान हो जाता है, तो/एक धागा फिर से संलग्न किया जाएगा और वास्तव में परिणाम (इस मामले में, एक स्ट्रिंग) देता है। लेकिन "वसंत" सोचें, यह जेएसओएन में परिवर्तित पीओजेओ भी हो सकता है।

यह समझ में ही अगर भविष्य परिणाम एक और धागा द्वारा सुलझा लिया जाएगा पड़ता है। चैट एप्लिकेशन में, यह नया संदेश (अनुशंसित नहीं) या एक समर्पित प्रेषक धागा (बेहतर) के साथ एक और अनुरोध धागा होगा।

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