2010-07-27 11 views
12

मैं वसंत एमवीसी के साथ सर्वलेट 3.0 async समर्थन को एकीकृत करना चाहता हूं। कुछ ऐसा:स्प्रिंग एमवीसी 3 के साथ सर्वलेट 3 @ वेबसर्लेट और एसिंक का उपयोग कैसे करें?

@RequestMapping("/chat") 
@WebServlet(name="myServlet", asyncSupported=true) 
public String getMessage(String userName) { 
     ...... 
} 

क्या यह संभव है?

उत्तर

3

अभी तक वसंत फ्रेमवर्क 3.x में लागू नहीं किया गया है। देखें https://jira.springframework.org/browse/SPR-5587 और https://jira.springsource.org/browse/SPR-8517

क्या आप चाहते हैं धूमकेतु का समर्थन (लंबे समय से मतदान ajax) है, तो आप CometD (http://cometd.org/documentation/cometd-java/server/services/integration-spring) की कोशिश "हो सकता है"। लेकिन मैं आपको चेतावनी देता हूं कि मैंने इसे छोड़ दिया है, यह सिर्फ फुलाया गया है! (लंबी मतदान जैसे इस तरह की एक साधारण चीज को कॉन्फ़िगरेशन के दिनों की आवश्यकता होती है ??!

मैं बस स्प्रिंग 3 में कुछ रिस्टफुल कंट्रोलर लागू करूँगा और खुद को लंबे मतदान का कार्यक्रम दूंगा। अपने अजाक्स-स्टाइल अनुरोध को सर्वर पर बनाएं, आपका नियंत्रक इसे तब तक खुला रखता है जब तक सर्वर के पास ब्राउज़र पर भेजने के लिए नया डेटा न हो। बाद की घटनाओं को प्राप्त करने के लिए ब्राउज़र एक नया लंबा मतदान अनुरोध शुरू करता है। कनेक्शन टाइमआउट से बचने के लिए बस डमी मान वापस करें जो ग्राहक को अनुरोध दोहराता है।

सादा आसान तरीका सबसे अच्छा समाधान है।

+0

वसंत 3.1.0 जो जारी किया गया के लिए लागू किया जाना चाहिए, लेकिन https के अनुसार:

यहाँ एक वसंत MVC उदाहरण है: //jira.springsource.org/browse/SEC-1685 इसे 3.2.0 में ले जाया गया था ... हालांकि, सर्वलेट 3.0 समर्थन व्यापक शब्द है और इसका अर्थ यह नहीं है कि एसिंक प्रोसेसिंग भी –

4

इतना तेज़ नहीं, अच्छा लंबे मतदान को लागू करना इतना आसान नहीं है। आपके द्वारा उल्लिखित विधि अच्छी तरह से काम करती है, लेकिन "थ्रेड भुखमरी"

प्रत्येक लंबी मतदान एक थ्रेड का उपयोग करेगी, यदि आपके पास 1000 समवर्ती उपयोगकर्ता हैं तो आपको लंबे मतदान अनुरोध की सेवा के लिए 1000 थ्रेड की आवश्यकता होगी (जो क्लाइंट ब्राउज़र पर सर्वर साइड स्टेटस का अधिकांश समय अद्यतन करता है)

जेट्टी 6 में एक सतत पैटर्न है, जो कि वास्तविक आवेदन तर्क द्वारा उपयोग किए जाने वाले लंबे मतदान अनुरोध के धागे को चतुराई से रिलीज़ करता है।

+0

और जेटी 7 लागू किया जाएगा, अब मध्य 2011 में वर्तमान रिलीज पूरी तरह से इसका समर्थन करता है। मैं वसंत समर्थन में वर्तमान स्थिति की भी तलाश कर रहा हूं। –

2

प्रश्न काफी पुराना है, लेकिन अभी भी अनुत्तरित है। लेखक स्प्रिंग एमवीसी में एसिंक समर्थन चाहते थे, और समाधान अभी भी नहीं दिया गया है।

जैसा कि पिछले उत्तर में कहा गया है, एसिंक समर्थन अनुरोध वसंत समुदाय बगट्रैक को सबमिट किया गया था, और इसे वसंत 3.1.0 में लागू किया जाना था। इसे हाल ही में रिलीज़ किया गया है, लेकिन रिलीज नोट्स के अनुसार "सर्वलेट 3.0 सपोर्ट" संस्करण 3.2.0: https://jira.springsource.org/browse/SEC-1685

में मेरे आवेदन के लिए अत्यधिक कुशल कॉमेट की आवश्यकता है। मेरा वर्तमान कार्यान्वयन इस उदाहरण पर आधारित है: http://code.google.com/p/jquery-stream/wiki/EchoExample, लेकिन मुझे इसे स्प्रिंग एमवीसी नियंत्रक में ले जाने में रूचि है। अभी तक, मैंने अभी भी उदाहरण में सुधार किया है और शेष एप्लिकेशन के साथ संचार की अनुमति देने के लिए वसंत बीन्स मैन्युअल रूप से इंजेक्शन दिया है। मुझे इसके साथ कुछ समस्याएं थीं, मेरे प्रश्न में वर्णित: Tomcat 7 Async Processing failing - only one request processed simultanously। अभी के लिए यह ठीक काम कर रहा है।

मुझे उदाहरण मिला है जो jboss समाधान का उपयोग करता है: http://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html, लेकिन मेरे लिए jboss का उपयोग कोई समाधान नहीं है। जेबॉस बहुत बड़ा, बहुत धीमा और विकसित करना बहुत कठिन है।

+0

देखें (और वोट दें :)) https://jira.springsource.org/browse/SPR-8517 –

0

सर्वलेट 3.0 async समर्थन वर्तमान में विचार किया जा रहा है। यदि आपके पास विशिष्ट परिदृश्य हैं जो आप प्रतिबिंबित करना चाहते हैं, तो कृपया SPR-8517 के अंतर्गत टिप्पणी करें या टिकट देखें और चर्चा का पालन करें।

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