2012-02-25 16 views
16

मुझे चलाने के लिए बहुत बुनियादी socket.io नमूना भी परेशानी हो रही है।काम करने के लिए मूल socket.io नमूना प्राप्त करना

var io = require('socket.io').listen(80); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 
सर्वर साइड पर

और

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 
क्लाइंट की तरफ

: उदाहरण उनकी साइट के स्वागत पृष्ठ पर पहले उदाहरण के लिए। मैं एक host.js फ़ाइल में सर्वर-साइड, और एक client.htm फ़ाइल में क्लाइंट साइड बचाने के लिए, और मैं npm host.js चलाते हैं, मैं

info - socket.io started 
    warn - error raised: Error: listen EADDRINUSE 

जो पहले से ही वास्तव में की उम्मीद नहीं है मिलता है। फिर, client.htm के लिए (या कम से कम मुझे लगता है कि मुझे इसके साथ क्या करना है - इसे क्लाइंट.htm फ़ाइल में पेस्ट करना), मुझे केवल एक खाली स्क्रीन मिलती है। बहुत आश्चर्य की बात नहीं है, क्योंकि यह एक nonexisting फ़ाइल /socket.io/socket.io.js सहित, लेकिन फिर भी host.js को यह बदल रहा है (जो मुझे लगता है यह माना जाता है) तथ्य यह है कि मैं केवल एक खाली स्क्रीन मिल परिवर्तन नहीं करता है से शुरू होता है ...

मैं अनजान हूँ।

उत्तर

16

EADDRINUSE का अर्थ है कि पता पहले से उपयोग में है इसलिए यह सॉकेट नहीं प्राप्त कर सकता है। क्या आपकी मशीन पर पोर्ट 80 पर कुछ और चल रहा है? 80 आमतौर पर वेब सर्वर द्वारा उपयोग किया जाता है।

आप इसे किसी अन्य पोर्ट पर भी आजमा सकते हैं।

कारण आपको एक खाली फ़ाइल दिखाई देती है, यह नोड सर्वर से कनेक्ट नहीं होता है (क्योंकि यह सॉकेट नहीं मिल सका) इसलिए समाचार समाचार कभी नहीं बुलाया जाएगा। यह भी जो कुछ भी 80 पर चल रहा है के सॉकेट जो कि घटना :)

फेंकना कभी नहीं होगा के बाद आप बंदरगाह संघर्ष को हल करने के जोड़ने हो सकता है, जब आप सर्वर चलाने के लिए, यह सिर्फ कहना चाहिए:

जानकारी - socket.io

और अब यह कनेक्शन की प्रतीक्षा कर रहा है।

सुनिश्चित करें कि आप अपने बंदरगाह पर एचटीएम लाइन अपडेट करें। उदाहरण के लिए, 81 यदि:

var socket = io.connect('http://localhost:81'); // note the :81 

संपादित करें: मैं सिर्फ यह पता करने की कोशिश की और htm फ़ाइल में मैं socket.io.js फ़ाइल के सापेक्ष पथ सेट किया था। इसे एनपीएम के माध्यम से स्थापित करने के बाद यह मेरी निर्देशिका में था।

<script src="node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script> 

सुनिश्चित करें कि पथ एचटीएम फ़ाइल से संबंधित है (एक/से शुरू नहीं होता है)। यहाँ कैसे मुझे पता चला जहां मेरा था है:

find . -name 'socket.io.js' 

जीत पर: dir socket.io।जे एस/एस

तुम भी साथ (* nix पर आप सामने sudo आवश्यकता हो सकती है) मेजबान चलाना चाहिए:

node host.js 

अंतिम बात मैं किया था जब नमूना कोशिश कर htm फ़ाइल में एक जोड़ी लाइनों बदल रहा था इस पर जब घटना हुई तो मैं एक चेतावनी संदेश बॉक्स देख सकता था:

socket.on('news', function (data) { 
    alert(JSON.stringify(data)); 
+1

क्या इससे कोई फर्क पड़ता है? मैंने 81 की कोशिश की और अब मेजबान पक्ष चलाते समय यह लटकता है, यानी यह कहता है 'जानकारी - socket.io शुरू हुआ' लेकिन यह कमांड लाइन पर वापस नहीं आता है। .htm पृष्ठ अभी भी खाली है, इसलिए यह समस्या को हल करने के लिए प्रतीत नहीं होता है। – user1111929

+3

यह EADDRINUSE त्रुटि हल करता है जो आपका पहला मुद्दा था। हाँ यह मायने रखता है। यह भी लटक रहा नहीं है - सर्वर संचार के लिए इंतजार कर रहा है। तो, अब आप समस्या के सर्वर पक्ष के आधे हल हो गए हैं। समस्या के ग्राहक पक्ष के लिए – bryanmac

+0

, क्या आपने एचटीएम पृष्ठ को http: // localhost से कनेक्ट करने के लिए अद्यतन किया: 81 (नहीं: 81)? – bryanmac

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