2015-06-29 9 views
16

पर छवियों/फ़ाइलों को भेजना मैं वसंत websockets (एसटीओएमपी एक उप-प्रोटोकॉल के रूप में) और सॉक्स का उपयोग कर एक संदेश अनुप्रयोग पर काम कर रहा हूं।सॉक्सज + स्प्रिंग वेबसाइट्स + स्टॉम्प

मुझे संदेशों में फ़ाइलों को भेजने के लिए समर्थन प्रदान करना चाहिए।

this ticket के अनुसार, सॉक्स बाइनरी डेटा का समर्थन नहीं करता है, लेकिन STOMP करता है।

मुझे पता है कि हम छवि को बेस 64 में परिवर्तित कर सकते हैं और इसे स्टॉम्प पर भेज सकते हैं, लेकिन मुझे लगता है कि यह बहुत अच्छा अभ्यास नहीं है क्योंकि इसमें बहुत सारे रूपांतरण और ओवरहेड हैं। इसके अलावा मुझे संदेशों को सहेजना है, इसलिए सर्वर पर इस बेस 64 एन्कोडेड फ़ाइलों को फिर से सहेजने के लिए मुझे उन्हें डीकोड करना होगा।

मैं सवालों का जोड़ी:

1) वहाँ एक समाधान sockjs + या Base64 लिए एक ही रास्ता परिवर्तित stomp से अधिक छवि/फ़ाइलें भेजने के लिए है?

2) यह एक बहुत ही मूर्ख सवाल हो सकता है लेकिन this question के अनुसार STOMP (सॉक्स के बिना) पर बाइनरी डेटा भेजना संभव है। सॉक्स के बिना फॉलबैक का समर्थन करना कितना मुश्किल है?

धन्यवाद।

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

उत्तर

5

कोई वेब सॉकेट कार्यान्वयन बाइनरी डेटा को संभालेगा यदि यह बेस 64 एन्कोडेड है। यह अनिवार्य रूप से एक स्ट्रिंग के लिए एक बाइनरी धारा serializes। सभी सॉकेट ट्रांसपोर्ट और रैपर स्ट्रिंग डेटा को संभाल सकते हैं। किसी भी जावा बेस 64 कार्यान्वयन काम करना चाहिए।

ब्राउज़र पक्ष बेस 64 पर btoa() और atob() के साथ आधुनिक ब्राउज़र में मूल रूप से संभाला जाता है। यदि आप विरासत ब्राउज़र का समर्थन करते हैं तो आपको पॉलीफ़िल की आवश्यकता हो सकती है।

यह कहा गया है कि, यदि जावा सर्वर वेब उपयोगकर्ताओं के बीच सिर्फ प्रॉक्सी संदेश है, तो आपको जावा में छवियों को डीकोड करने की आवश्यकता नहीं होगी, आप केवल एक सॉकेट कनेक्शन से दूसरे स्ट्रिंग एन्कोडेड छवियों को पास करेंगे।

+0

सादा वेबसाइकिल कार्यान्वयन बाइनरी डेटा का समर्थन करता है, मुझे इसके बारे में पता है। लेकिन मैं विशेष रूप से यह पता लगाने की कोशिश कर रहा हूं कि 'सॉकजेएस' के लिए कोई हैक/टर्नअराउंड है या नहीं। – Karthik

+0

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

+0

लेकिन क्या यह स्ट्रीम करेगा, या भेजने से पहले स्ट्रिंग एक्शन में केवल एक ही एन्कोड करेगा। दूसरे शब्दों में, क्या इस उद्देश्य के लिए वेबसाकेट का उपयोग करना कुशल है? – Marc

0

आपके पास एक बाइनरीज है। यह websockets का उपयोग कर वेब के लिए रीयलटाइम बाइनरी स्ट्रीमिंग का वादा करता है।

उदाहरण

https://github.com/binaryjs/binaryjs/tree/master/examples

जाँच आप Atmosphere(wasync) की जाँच करनी चाहिए, लिंक कैसे लागू करने के लिए के लिए मार्गदर्शन करेंगे देता है।

जहां तक ​​क्लाइंट साइड पर आपके ब्राउज़र फ़ॉलबैक परिदृश्य को समझ लिया गया है, आप [बेस 64 पॉलीफिल lib (https://github.com/davidchambers/Base64.js/) का उपयोग कर सकते हैं।

बेस्ट सादर

+0

मुझे लगता है कि शायद आपने मेरे प्रश्न को गलत समझा, मैं बाइनरी का समर्थन करने वाली किसी चीज़ की तलाश नहीं कर रहा था, मैं सॉकजेएस पर बाइनरी डेटा भेजने का एक तरीका ढूंढ रहा हूं। – Karthik

+0

आप विशेष रूप से सॉकजेएस के माध्यम से स्थानांतरण बाइनरी डेटा क्यों देख रहे हैं, क्या आप पुराने ब्राउज़र या किसी अन्य कारण का समर्थन करने की कोशिश कर रहे हैं? – daimon

+0

हां, मैं अपने आप से फ़ॉलबैक विकल्प लागू नहीं करना चाहता हूं। – Karthik

0

एक अन्य विकल्प केवल बाइनरी छवियों के भेजने के लिए WebRTC का उपयोग करने के लिए किया जाएगा। इसके लिए सलाहकारों में से एक यह है कि ये संदेश पूरी तरह से सहकर्मी-सहकर्मी होंगे। आपको केवल इसे अपने वेब ऐप में लागू करने की आवश्यकता होगी, न कि आपके बैकएंड में। आपको छवियों के लिए उपयोग की जाने वाली बैंडविड्थ के लिए भुगतान करने की आवश्यकता नहीं होगी। दुर्भाग्य से हालांकि, वेबआरटीसी आईई द्वारा समर्थित नहीं है।

+0

यह समस्या को हल नहीं करेगा? मुझे सर्वर में संदेशों को सहेजना है। वेबआरटीसी के साथ ऑफ़लाइन मैसेजिंग संभव नहीं होगा। – Karthik

+0

हां। मुझे नहीं पता कि आप बाइनरी डेटा भेजने के लिए websockets का उपयोग क्यों करना चाहते हैं यदि यह रीयलटाइम एप्लिकेशन नहीं है। यदि आप संदेशों को कतारबद्ध कर रहे हैं तो मल्टीपार्ट अपलोड का उपयोग करने के लिए और अधिक समझदारी होगी। – Martin

+0

कोई उपयोगकर्ता किसी वेबसॉकेट कनेक्टइन के माध्यम से ऑनलाइन विभिन्न उपयोगकर्ताओं के साथ चैट कर सकता है, यदि वह संदेश ऑफ़लाइन उपयोगकर्ता भेजना चाहता है तो मैं उसी websokcet कनेक्शन का उपयोग कर सकता हूं। क्लाइंट को परेशान क्यों होना चाहिए कि उपयोगकर्ता ऑनलाइन है या नहीं? – Karthik

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