कोई प्रलेखन नहीं है की कोशिश कर सकते, यह कम या ज्यादा मैं क्या कोड से व्याख्या कर सकते हैं:
Forced close
- सॉकेट समापन राज्य में है
Forced close
- https://github.com/socketio/engine.io/blob/master/lib/socket.js
function onPacket(packet){
if ('ping' == packet.type && 'probe' == packet.data) {
transport.send([{ type: 'pong', data: 'probe' }]);
self.emit('upgrading', transport);
clearInterval(self.checkIntervalTimer);
self.checkIntervalTimer = setInterval(check, 100);
} else if ('upgrade' == packet.type && self.readyState != 'closed') {
debug('got upgrade packet - upgrading');
cleanup();
self.upgraded = true;
self.clearTransport();
self.setTransport(transport);
self.emit('upgrade', transport);
self.setPingTimeout();
self.flush();
if (self.readyState == 'closing') {
transport.close(function() {
self.onClose('forced close');
});
}
} else {
cleanup();
transport.close();
}
}
Socket.prototype.close = function() {
if ('open' != this.readyState) return;
this.readyState = 'closing';
if (this.writeBuffer.length) {
this.once('drain', this.closeTransport.bind(this));
return;
}
this.closeTransport();
};
परिवहन जहां बंद कर दिया (यहाँ कोई कारण नहीं)
Transport close
- https://github.com/socketio/engine.io/blob/master/lib/socket.js
function cleanup() {
self.upgrading = false;
clearInterval(self.checkIntervalTimer);
self.checkIntervalTimer = null;
clearTimeout(self.upgradeTimeoutTimer);
self.upgradeTimeoutTimer = null;
transport.removeListener('packet', onPacket);
transport.removeListener('close', onTransportClose);
transport.removeListener('error', onError);
self.removeListener('close', onClose);
}
function onTransportClose(){
onError("transport closed");
}
हम एक ग्राहक डिस्कनेक्ट पैकेट मिला है, इसलिए हम 'बंद करने' के लिए सॉकेट स्थिति परिवर्तित
Client namespace disconnect
- https://github.com/socketio/socket.io/blob/master/lib/socket.js
Socket.prototype.onpacket = function(packet){
debug('got packet %j', packet);
switch (packet.type) {
case parser.EVENT:
this.onevent(packet);
break;
case parser.BINARY_EVENT:
this.onevent(packet);
break;
case parser.ACK:
this.onack(packet);
break;
case parser.BINARY_ACK:
this.onack(packet);
break;
case parser.DISCONNECT:
this.ondisconnect();
break;
case parser.ERROR:
this.emit('error', packet.data);
}
};
Socket.prototype.ondisconnect = function(){
debug('got disconnect packet');
this.onclose('client namespace disconnect');
};
पास परिवहन के कारणों में से एक
Transport error
- https://github.com/socketio/engine.io/blob/master/lib/socket.js
/**
* Called upon transport error.
*
* @param {Error} error object
* @api private
*/
Socket.prototype.onError = function (err) {
debug('transport error');
this.onClose('transport error', err);
};
https://github.com/socketio/engine.io/blob/master/lib/transport.js
/**
* Called with a transport error.
*
* @param {String} message error
* @param {Object} error description
* @api private
*/
Transport.prototype.onError = function (msg, desc) {
if (this.listeners('error').length) {
var err = new Error(msg);
err.type = 'TransportError';
err.description = desc;
this.emit('error', err);
} else {
debug('ignored transport error %s (%s)', msg, desc);
}
};
ऐसा लगता है जैसे वे हर जगह से सॉकेट करने के लिए त्रुटियों फेंक, इसलिए कारणों का पता लगाने के लिए एक ही रास्ता क्या खड़ी कर रहा है पता लगाने के लिए त्रुटि विवरण (बहुत ज्यादा नहीं जानकारी) पढ़ने या उनके सभी पुस्तकालयों की तलाश कर रहा है त्रुटि।
पीडी: बहुत सारी त्रुटियां हैं।
मेरी राय में, 'पिंगइंटरवाल' मान बढ़ाना केवल एक समाधान है, वास्तविक समाधान नहीं। यह उन ग्राहकों का कारण बन जाएगा जो वास्तव में कनेक्शन खो देते हैं जैसे कि वे अभी भी जुड़े हुए हैं। –