2011-09-28 17 views
17

RESTful प्रलेखन पढ़ना, ऐसा लगता है कि एसिंक्रोनस इंस्टेंस को कार्यान्वित करना संभव नहीं है, लेकिन किसी को SO पर बेहतर पता चल सकता है।असीमित रीस्टफुल वेब सेवाएं संभव हैं?

क्या मैं यहाँ मतलब मैं अतुल्यकालिक रूप से सेवा अनुरोध निष्पादित करने के लिए चाहते हैं:

@Path("/helloworld", asyncSupported=true) 
public class MyHelloWorldService { 
    ... 
} 

मैं जानता हूँ कि asyncSupported@Path में निर्धारित नहीं है, लेकिन मैं @WebServlet के लिए इसी तरह कुछ के लिए देख रहा हूँ। फिर, मैं AsyncContext उदाहरण (या समकक्ष कुछ भी) का उपयोग करना चाहता हूं।

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

+1

AJAX का उपयोग अपने रीस्टफुल विधि को असीमित रूप से कॉल करने के लिए क्यों नहीं करें? –

+0

@The क्योंकि AsyncContext को Servlet में अत्यधिक थ्रेड-प्रति-अनुरोध समस्या को हल करने के लिए लागू किया गया था। अस्थायी कॉल करने के लिए अजाक्स का उपयोग इस मुद्दे से निपटने के लिए नहीं होगा (सर्वर की तरफ)। विचार/समाधान धागे के सीमित सेट (Nginx की तरह थोड़ा) पर प्रसंस्करण के लिए अनुरोध कतार करना है। – JVerstry

+0

आप http://java.net/projects/jersey/lists/users/archive सूची पर पूछना चाहेंगे। आईआईआरसी जर्सी ने कुछ समय पहले वायदा के साथ प्रयोग किया था। यकीन नहीं है कि क्या विकसित हुआ है। –

उत्तर

8

रेस्टएसी के पास कुछ समर्थन है - @Suspend नामक एक कस्टम एनोटेशन का उपयोग करके।

यहाँ देखें: http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html

वहाँ भी जर्सी के शीर्ष पर एक रूपरेखा/पुस्तकालय लेकिन वायुमंडल कहा जाता है के रूप में अपना ध्यान केंद्रित लंबे समय से मतदान क्लाइंट/सर्वर वेब अनुप्रयोगों पर प्रतीत होता है अपने USECASE के लिए overkill हो सकता है कि (है उदाहरण के लिए चैट - https://github.com/Atmosphere/atmosphere)

[1] आपके अनुरोध के लिए सीडीआई दायरा उस धागे में खो जाएगा जो वास्तव में तर्क को निष्पादित करता है। अधिक जानकारी के लिए RESTEasy-682 समस्या देखें। यह एक ऐसी समस्या है जिसे किसी भी आरईएसटी ढांचे द्वारा हल नहीं किया गया है जिसे मैं इस पल में [मार्च 2014] पर जानता हूं।

2

यह CXF and Jetty Continuations के साथ स्पष्ट रूप से संभव है लेकिन यह जेटी 6 के साथ ही संभव है; उन्हें जेटी 7 में बदल दिया गया है जो सर्वलेट 3.0 spec में है और मुझे नहीं पता कि यह सीएक्सएफ द्वारा समर्थित है या नहीं। इसके अलावा, जेटी निरंतरता a messy API, with a lot of manual stuff का थोड़ा सा प्रतीत होता है, इसलिए मुझे नहीं पता कि कोड को कन्वर्ट करना कितना आसान है।

फिर भी, ऐसा लगता है कि कुछ हद तक संभव है। एक निम्न हवा के साथ और जब भगवान यह करेंगे।

+0

(और नहीं, मैंने कभी कोशिश नहीं की है।) –

2

आराम से spesification अभी भी अपने जीवन की शुरुआती उम्र में है। लेकिन इस समस्या को 2 भाग के रूप में माना जाना चाहिए। ग्राहक और सर्वर।

ग्राहक:

पिछले साल में ग्राहक के पक्ष हाल के परिवर्तन के लिए काफी परिपक्व हो गया। और हाल ही में Jeanfrancois Arcand के आधार पर एक गैर अवरुद्ध ग्राहक लागू किया गया था और भंडार में धक्का दिया गया था। एक स्पष्टीकरण here है।

सर्वर:

सर्वर साइड के लिए, यह अभी भी अपरिपक्व है। नए सर्वलेट विनिर्देशन को अपनाना काफी धीमा है और डेवलपर के रूप में मैं इन मुद्दों को हल करने के लिए JSR 339 की अपेक्षा कर रहा हूं। और यह इन वाक्यों के साथ जेएसआर स्पेक में भी संबोधित किया गया है।

जेएक्स-आरएस 1.1 सर्वर पक्ष पर एक तुल्यकालिक अनुरोध प्रतिक्रिया मॉडल को परिभाषित करता है। यह जेएसआर एक सरल एसिंक्रोनस अनुरोध प्रसंस्करण मॉडल निर्दिष्ट करेगा जैसे प्रतिक्रिया अनुरोध पर असीमित लौटाई जा सकती है। सर्वलेट 3।0 को ऐसे समर्थन को सक्षम करने के लिए लीवरेज किया जा सकता है लेकिन कार्यान्वयन अन्य कंटेनर-विशिष्ट एपीआई का उपयोग करने के बजाय चुन सकते हैं।

हालांकि अन्य विकल्प भी हैं। जेटी जैसी परियोजनाएं इस तरह की समस्याओं को संबोधित कर रही हैं जैसे example। मैं केवल सुझाव दे सकता हूं कि समुदाय अन्य बढ़ने पर विचार करें।

1

आरएसटी-आधारित एसिंक्रोनस प्रोटोकॉल के उदाहरण के लिए Pubsubhubbub here देखें। यह एटम सिंडिकेशन प्रारूप पर आधारित है और डब्ल्यूएस- * पब/उप तंत्र से बहुत आसान है।

+0

यह एक रूबी समाधान है, क्या आपके पास जावा है? – JVerstry

+0

जब मैं एसिंक्रोनस का संदर्भ देता हूं, तो मेरा मतलब है कि सर्वर की तरफ एसिंक्रोनस अनुरोध प्रसंस्करण ... – JVerstry

2

अब आप Asynchoronous RESTful का उपयोग कर JAX-आरएस जो हाल ही में जारी का हिस्सा है 2.0 एपीआई कॉल कर सकते हैं जावा ईई 7,0

http://www.slideshare.net/reza_rahman/jaxrs2?ref=

0

तुम भी वसंत Webflux जो async और कम से प्रतिक्रियाशील है का उपयोग करना चाहेंगे उसी समय। हालांकि, यह जावा ईई से एक जेएक्स-आरएस कार्यान्वयन नहीं है।

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