2012-02-21 14 views
7

के साथ काम करने के लिए तो मैं इसे 2 दिनों तक काम करने की कोशिश कर रहा हूं और मैं अटक गया हूं। यह मेरी पहली बार रेल के लिए सर्वर को कॉन्फ़िगर करना है जो नोडजेएस + सॉकेट आईओ का उपयोग करता है। मैं एनजीआईएनएक्स और यूनिकॉर्न के साथ एक नोब हूं। असल में मेरे ऐप का नोडजेएस + सॉकेटियो हिस्सा उन संदेशों को संदेश देगा जो मेरे ऐप से जुड़े हुए हैं। यह मेरा nginx.confNGINX विन्यास Socket.IO

server{ 
    listen 80 default; 
    root /home/deployer/saigon/public; 
    try_files $uri/index.html $uri @unicorn; 

    location /sockets { 
     proxy_pass http://localhost:3210; 
    } 

    location @unicorn { 
     proxy_pass http://localhost:3000; 
    } 
} 

और मेरे production.rb में, मैं यूआरएल उपयोगकर्ता से

SOCKET_IO_URL ='http://localhost:8080/sockets 

क्यों 8080 के लिए/प्राप्त संदेश संदेश भेजने के लिए होगा जो कॉन्फ़िगर किया गया है? मैं 8080 -> 80

को http://localhost:8080/sockets तक पहुंचने का प्रयास करने के लिए वग्रेंट का उपयोग करता हूं और मैं सॉकेट स्वागत संदेश प्राप्त करने में सक्षम था। मैंने अपने नोडजेएस सर्वर लॉग को देखा और यह संदेश ठीक से प्राप्त कर रहा था। हालांकि, जब प्रसारण की बात आती है ..... यह सिर्फ ऐसा नहीं करता है। क्या किसी ने कभी भी इस तरह के ऐप को सेट अप के साथ काम करने के लिए प्राप्त किया है जिसे मैं करने की कोशिश कर रहा हूं? क्या मुझे अपाचे + यूनिकॉर्न के साथ जाना चाहिए?

'

उत्तर

12

अपडेट किया गया उत्तर

मैं अंत में यह काम कर पाने के लिए एक तरीका खोज निकाला है। यह बिल्कुल स्पष्ट नहीं है, लेकिन जब सबफ़ोल्डर पर socket.io होस्ट करते हैं, तो आप कनेक्ट स्टेटमेंट में सबफ़ोल्डर का उपयोग नहीं करते हैं। यही वह है जो मैं पहले कर रहा था और ग्राहक को कभी प्रतिक्रिया नहीं मिली थी।

काम नहीं

<script src="/test/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080/test/', {resource:'test/socket.io'}); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

http://localhost:8080/परीक्षण/ इस भाग जो बातें बंद फेंक रहा है। यह स्थानीय सॉकेट के लिए नामस्थान बनाता है जो सर्वर पक्ष का सम्मान नहीं करता है। तो ग्राहक नामस्थान '/ test /' पर संदेश भेजता है लेकिन सर्वर प्रतिक्रियाएं खाली नामस्थान पर जा रही हैं 'इसलिए क्लाइंट को संदेश कभी नहीं मिलते हैं। इसे '/ test /' को आसानी से निकालने के लिए कामकाज करें और सुनिश्चित करें कि आप क्लाइंट और सर्वर पर संसाधन चर का उपयोग कर रहे हैं।

कार्य करना!

<script src="/test/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080', {resource:'test/socket.io'}); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

मुझे आशा है कि यह मदद करता है आप अपने अंत पर काम कर बातें मिलता है।

मूल उत्तर

यह अपने सेटअप के साथ एक समस्या नहीं है, यह socket.io उप फ़ोल्डर पर काम करने के लिए नहीं चाहते की एक समस्या है। मैं यह शर्त लगाने के लिए तैयार हूं कि यदि आपने/सॉकेट को छोड़ दिया है तो आपका उदाहरण ठीक काम करेगा। Subfolders पर socket.io कनेक्शन होस्ट करने का प्रयास करते हुए http-node-proxy का उपयोग करते समय मैं एक ही समस्या में भाग गया। थोड़ी देर पहले एक बग बनाया गया था, लेकिन इसे बंद कर दिया गया था और कभी हल नहीं हुआ था।

https://github.com/LearnBoost/socket.io-client/issues/185

https://github.com/LearnBoost/socket.io/issues/320

मैं अभी भी रूप में अच्छी तरह एक समाधान के लिए देख रहा हूँ, लेकिन मुझे लगता है कि मैं अपने आस्तीन अपने आप रोल और कोड में खुदाई करने के लिए जा रहा हूँ है।

+0

इसलिए मूल रूप से सॉकेट/सॉकेट।आईओ को जड़ फ़ोल्डर में रहने की जरूरत है .... जिसका मतलब है कि मुझे पता होना है कि रेलवे के लिए कौन सा अनुरोध जा रहा है और जब यह रूट हिट करता है तो आईओओ को सॉकेट करने जा रहा है? = ___ = argh – denniss

+0

अभी के लिए हाँ। यदि संभव हो तो आप इसके बजाय एक सबडोमेन मार्ग का उपयोग कर सकते हैं। http://socket.domain.com/। यह मेरे लिए काम नहीं करता क्योंकि मैं एक सबडोमेन के लिए एसएसएल प्रमाण पर कोई और पैसा नहीं बिताना चाहता था। –

+0

@ डेनिस मैंने एक कामकाज के साथ अपना जवाब अपडेट किया है। अभी भी यह पता लगाने के लिए खोदना है कि क्या यह इच्छित डिज़ाइन या बग तय किया जाना है। –