2013-01-15 62 views
7

यह प्रश्न socket.io संस्करणों < 0.9.x से संबंधित है। नए संस्करणों में ट्रांसपोर्ट सेट करने के विभिन्न ट्रांसपोर्ट और तरीके हैं।node.js और socket.io। websocket के लिए परिवहन प्रकार विन्यास?

मैं दो सप्ताह में नोड जेएस और सॉकेट.ओ का परीक्षण करता हूं। जब मैंने शुरू किया तो मुझे क्लाइंट में socket.send(message) फ़ंक्शन से समस्या मिली। मैं सर्वर को कोई संदेश नहीं भेज सकता। लेकिन मैं अभी भी सर्वर से संदेश प्राप्त कर सकता हूं। जब मैंने सर्वर पक्ष के कॉन्फ़िगरेशन ट्रांसपोर्ट को पाया तो मैंने इस समस्या को हल किया:

socket.set('transports',[ 
    'xhr-polling' 
    , 'jsonp-polling' 
]); 

सबकुछ अच्छा है। अब मैं सर्वर को संदेश भी भेज सकता हूं। लेकिन मुझे अभी भी एक सवाल है कि मुझे परिवहन को क्यों कॉन्फ़िगर करना है। डिफ़ॉल्ट socket.io उपयोग WebSocket परिवहन इस तरह की स्थापना:

socket.set('transports', [ 
    'websocket' 
    , 'flashsocket' 
    , 'htmlfile' 
    , 'xhr-polling' 
    , 'jsonp-polling' 
]); 

तो यह पहले नहीं XHR-मतदान में WebSocket उपयोग करता है। लेकिन socket.send(msg) का उपयोग करते समय सर्वर को क्लाइंट से भेजे गए किसी भी संदेश को प्राप्त नहीं किया जा सकता है socket.emit(...)

तो समस्या यह है कि यहां वेबसाईट का समर्थन नहीं कर रहा है? ब्राउज़र या node.js ... मुझे खेद है, लेकिन मैंने Google से इतने सारे पेज खोजे और मुझे इसके लिए कोई जवाब नहीं मिला है।

मैं संस्करण 0.8.16, socket.io संस्करण 0.9.13 और नवीनतम ब्राउज़रों Node.js का उपयोग करें: क्रोम, फ़ायरफ़ॉक्स, ओपेरा

मैं WebSocket नहीं XHR-मतदान का उपयोग करना चाहते।

उत्तर

5

यह अजीब बात है क्योंकि भले ही websockets आपके सर्वर कॉन्फ़िगरेशन द्वारा समर्थित नहीं हैं, socket.io अगले सर्वोत्तम उपलब्ध विधि (आपके मामले में xhr-polling) का चयन करेगा। असल में, आपको उन ट्रांसपोर्ट को सॉकेट के रूप में सेट करने की भी आवश्यकता नहीं है। मैं डिफ़ॉल्ट रूप से 'websocket' को प्राथमिक विधि के रूप में उपयोग करने का प्रयास करूंगा। यह संभवतः आपके कोड के साथ कुछ अन्य समस्या का संकेत दे सकता है?

वेबसाइकिलों का समर्थन नहीं कर रहा है निश्चित रूप से वे ब्राउज़र नहीं हैं जिनका आप उपयोग कर रहे हैं और न ही node.js। यह आपके सर्वर सेटअप पर निर्भर करेगा।

पहले जांच कर लें:

  1. बंदरगाह आप सुन रहे हैं अपने फ़ायरवॉल में खुला है
  2. आपका वेबसर्वर WebSockets का समर्थन करता है। आप अपाचे का उपयोग कर और एक आंतरिक IP के लिए आपके अनुरोध proxing रहे हैं: पोर्ट, WebSocket जब तक आप apache-websocket या pywebsocket

क्या अंत में हल मेरी समस्या अपाचे पोर्ट 80 और होने पर सुन निष्क्रिय करने के लिए था की तरह कुछ स्थापित काम नहीं करेगा node.js उस बंदरगाह पर सुन रहा है। एसओ पर उत्तर दिया गया है जिसने मुझे मदद की: https://stackoverflow.com/a/7640966/2347777