2012-03-05 11 views
8

मैं socket.io का उपयोग करके, node.js सर्वर सेट अप करने का प्रयास कर रहा हूं। जो समस्या मैं देख रहा हूं वह यह है कि मेरा सर्वर डिस्कनेक्ट हो रहा है + क्लाइंट को हर 25 सेकंड में दोबारा जोड़ना।node.js sockets.io प्रत्येक ~ 25 सेकंड (दिल की धड़कन से संबंधित) डिस्कनेक्टिंग

var io = require('socket.io').listen(5876); 
io.sockets.on('connection', function (socket) 
{ 
    console.log("New connection established"); 

    socket.on('disconnect', function() 
    { 
     console.log("A client has disconnected."); 
    }); 
} 

मेरे क्लाइंट socket.io.js वितरण का उपयोग कर जोड़ता है:

यहाँ अपने सर्वर कोड है। जैसा कि मैं इसे समझता हूं (जाहिर तौर पर गलत तरीके से), मुझे अपने ग्राहक को कनेक्शन को सोचने से रोकने और इसे डिस्कनेक्ट करने से रोकने के लिए हर 15 सेकंड में "दिल की धड़कन" (":: 2" का संदेश) भेजने की आवश्यकता होती है। मूल रूप से:

<script src="socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:5876'); 

    socket.on('connect', function(data) 
    { 
     console.log("Connected to server."); 
     setInterval(function() { socket.emit("::2"); console.log("sent heartbeat"); }, 15000); // schedule a heartbeat for every 15 seconds 
    }); 
</script> 

लेकिन ग्राहक अभी भी काट दिया जा रहा है + हर 25 सेकंड (बहुत पहले 25 वीं-दूसरे टिक को छोड़कर) को पुन: कनेक्ट।

Node.js सर्वर कंसोल लॉग (कुछ पहले समान कनेक्ट/डिस्कनेक्ट चरणों काट हो सकता है के रूप में यह हर 25 सेकंड गूंज गया था) इस तरह दिखता है:

New connection established 
    debug - emitting heartbeat for client 652791160849839915 
    debug - websocket writing 2:: 
    debug - set heartbeat timeout for client 652791160849839915 
    debug - got heartbeat packet 
    debug - cleared heartbeat timeout for client 652791160849839915 
    debug - set heartbeat interval for client 652791160849839915 
    info - transport end 
    debug - set close timeout for client 652791160849839915 
    debug - cleared close timeout for client 652791160849839915 
    debug - cleared heartbeat interval for client 652791160849839915 
A client has disconnected. 
    debug - discarding transport 
    debug - client authorized 
    info - handshake authorized 5961067041159055274 
    debug - setting request GET /socket.io/1/websocket/5961067041159055274 
    debug - set heartbeat interval for client 5961067041159055274 
    debug - client authorized for 
    debug - websocket writing 1:: 
New connection established 

मैं कैसे से अपने सर्वर बंद कर सकते हैं डिस्कनेक्ट करना + क्लाइंट को हर 25 सेकंड में दोबारा जोड़ना?

+0

रोल करने के लिए है। अपने मैन्युअल दिल की धड़कन कॉल करने के बाद कनेक्शन और डिस्कनेक्शन घटनाओं की जांच करने का प्रयास करें। – f0x

+0

क्या आपने कभी इसे हल किया है? \t मुझे सही समस्या है। मैं 0.8.7 तक गिर गया और अभी भी एक ही मुद्दा है। डीबग - क्लाइंट 3744936361854682925 जानकारी के लिए निकाल दिया गया दिल की धड़कन टाइमआउट - परिवहन अंत डीबग - क्लाइंट के लिए क्लोज़ टाइमआउट सेट करें 3744 936361854682925 डीबग - क्लाइंट के लिए क्लोज़ड क्लोजआउट टाइम 3744936361854682925 –

+0

@PranoyC यहां एक कामकाज है जो काम कर सकता है: https://github.com/socketio/socket .io/issues/777 इसके अलावा, मैं हाल ही में socket.io के नवीनतम संस्करणों का उपयोग कर रहा हूं और किसी भी समस्या में नहीं चला है। – Josh1billion

उत्तर

9

आप socket.io के नवीनतम संस्करण का उपयोग कर रहे, 0.9.1/0.9.1 -1? यदि ऐसा है, तो यह Guillermo द्वारा पुष्टि एक ज्ञात मुद्दा है। वर्तमान सिफारिश जहाँ तक मुझे तुम न के रूप में इस socket.io द्वारा नियंत्रित किया जाता मैन्युअल रूप से दिल की धड़कन पैकेट भेजने के लिए की जरूरत है पता है के रूप में वापस करने के लिए 0.9.0 या 0.8.7

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

+0

यह होना चाहिए; मैंने अभी कल रात इसे स्थापित किया है, इसलिए यह शायद नवीनतम संस्करण है। मैं 0.9.0 पर वापस कैसे रोल कर सकता हूं? मैंने इस तरह की अनुशंसित एनपीएम विधि का उपयोग करके स्थापित किया: "npm install socket.io" – Josh1billion

+1

आप स्थापित करने के लिए एक विशिष्ट संस्करण निर्दिष्ट कर सकते हैं: npm [email protected] – maroonmed

+0

इंस्टॉल करें, बिल्कुल सही, धन्यवाद! – Josh1billion

2

आप सॉकेट से जुड़ा रखने के लिए एक दिल की धड़कन को भेजने की जरूरत नहीं है, यह भी socket.emit की वाक्य रचना है

  socket.emit('event_name',{"data"}); 
संबंधित मुद्दे