2016-08-16 20 views
7

के पीछे कनेक्ट नहीं हैं यह काफी आम समस्या है, लेकिन मुझे अपने विशिष्ट मामले का समाधान नहीं मिल रहा है। मैं ग्लासफ़िश 4.1.1 का उपयोग कर रहा हूं और मेरा एप्लिकेशन Websockets लागू करता है।वेबसाइट्स प्रॉक्सी

एक ग्राहक के पक्ष मैं बस WS-सर्वर से कनेक्ट कर रहा हूँ पर:

var serviceLocation = "ws://" + window.location.host + window.location.pathname + "dialog/"; 
var wsocket = new WebSocket(serviceLocation + token_var); 

एक सर्वर साइड WebSockets @ServerEndpoint कार्यक्षमता के माध्यम से कार्यान्वित किया है और कर रहे हैं पर बहुत ही सामान्य दिखता है:

@ServerEndpoint(value = "/dialog/{token}", decoders = DialogMessageDecoder.class) 
public class DialogWebsoketEndpoint { 

    @OnOpen 
    public void open(final Session session, @PathParam("token") final String token) { ... } 
etc. 
} 

सब कुछ उस समय तक ठीक काम करता है जब ग्राहक प्रॉक्सी के पीछे कनेक्ट करने का प्रयास करता है। इस परीक्षण का उपयोग: http://websocketstest.com/ मुझे पता चला है कि ग्राहक का कंप्यूटर http-proxy 1.1 के पीछे काम करता है। वह websockets से कनेक्ट नहीं हो सकता है, बस बस आग नहीं लग रहा है। wsoscket.readyState कभी नहीं बनें 1.

ग्राहक इस प्रॉक्सी के पीछे कनेक्ट होने पर भी इस कोड को काम करने के लिए अपने सर्वर एंडपॉइंट को कैसे ट्यून कर सकता हूं?

अग्रिम धन्यवाद!

अद्यतन: मुझे लगता है कि कंप्यूटर पर websocketstest साथ एक स्क्रीनशॉट प्रदान करेगा: enter image description here

अपने कंप्यूटर पर यह एक बात को छोड़कर इसी तरह लगता है: HTTP प्रॉक्सी: NO।

+0

आशा [यह लिंक] (http://stackoverflow.com/questions/29430503/java-websocket-with-proxy) आपको – Sanjeev

+1

में मदद करता है मैं बुरी खबरों के वाहक बनना नहीं चाहता, लेकिन सभी संभावनाओं में प्रॉक्सी सर्वर स्वयं है जो websockets का सही ढंग से समर्थन नहीं करता है। सॉकेट.आईओ जैसे मतदान के लिए फ़ॉलबैक तंत्र को छोड़कर आप उस प्रोग्राम को दूर नहीं कर सकते हैं। – Gimby

+0

गिम्बी, आपके उत्तर के लिए धन्यवाद, लेकिन http://websocketstest.com/ ने दिखाया कि हैंडशेक (और इको टेस्ट) एसएसएल 443 पोर्ट के माध्यम से सफल था। तो मुझे लगता है कि websockets उस प्रॉक्सी-सर्वर के साथ काम कर सकते हैं। – Luxor

उत्तर

9

प्रश्न राज्यों की टिप्पणियों के मुताबिक, ऐसा लगता है कि प्रॉक्सी वेबसाइट्स को सही ढंग से समर्थन नहीं देती है।

यह एक आम मुद्दा है (कुछ सेल-फोन कंपनियों में प्रॉक्सी होती है जो वेबस्केट कनेक्शन को बाधित करती हैं) और समाधान टीएलएस/एसएसएल कनेक्शन का उपयोग करना है।

समस्या मुख्य रूप से सामने आती है क्योंकि कुछ प्रॉक्सी वेबसाईट अनुरोध शीर्षकों के "सही" (पढ़ें: दूषित) हैं।

हालांकि, टीएलएस/एसएसएल का उपयोग करते समय, प्रॉक्सी हेडर डेटा (जो एन्क्रिप्टेड है) नहीं पढ़ सकता है, जिससे अधिकांश प्रॉक्सी पर डेटा "पास-थ्रू" होता है।

इसका मतलब है कि हेडर दूसरे छोर पर सुरक्षित रूप से पहुंचेंगे और प्रॉक्सी (ज्यादातर) कनेक्शन को अनदेखा कर देगा ... यह अभी भी एक समस्या हो सकती है जहां कनेक्शन टाइमआउट का संबंध है, लेकिन यह आमतौर पर इस मुद्दे को हल करता है।

संपादित

सूचना है कि ब्राउज़र एन्क्रिप्टेड सामग्री के साथ गैर-एन्क्रिप्टेड सामग्री मिश्रण से ग्राहक की रक्षा करेगा। सुनिश्चित करें कि स्क्रिप्ट कनेक्शन wss संस्करण का उपयोग करते हुए TLS/SSL कनेक्शन का उपयोग करते समय कनेक्शन शुरू करता है।

+1

धन्यवाद! हम कोशिश करेंगे! – Luxor

+0

@ लक्सर को कोई सफलता मिली? – Gimby

+0

@ गिम्बी, हाँ! अब यह https/ssl (wss प्रोटोकॉल का उपयोग कर) के माध्यम से काम करता है। मिस्ट के लिए बहुत धन्यवाद! मैंने जवाब को सर्वश्रेष्ठ के रूप में भी चिह्नित किया! – Luxor

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