2014-05-01 6 views
6

मैं ब्राउज़र कंसोल ऐसी है किसॉकेट-आईओ: क्लाइंट साइड 'कनेक्ट' घटना फायरिंग नहीं जब सॉकेट पहले से ही सेटअप

socket.socket.connected 

रिटर्न सच में socketio के साथ एक WebSocket की स्थापना की है। लेकिन अगर मैं जोड़ता हूं:

socket.on('connect', function() {console.log('some'); }); 

कुछ नहीं होता है यानी 'कुछ' लॉग नहीं है। यह आधिकारिक सॉकेट-आईओ पेज से है:

var socket = io.connect(); 
    socket.on('connect', function() { 
    socket.emit('ferret', 'tobi', function (data) { 
     console.log(data); 
    }); 
    }); 

मुझे लगता है कि यह कोड काम कर रहा है। लेकिन अब मुझे संदेह है कि यह केवल काम करता है क्योंकि जब श्रोता सेटअप होता है (यानी socket.on...) सॉकेट कनेक्ट नहीं होता है और केवल कनेक्शन स्थापित करने में देरी की वजह से कनेक्शन स्थापित होने पर श्रोता सक्रिय होता है। अगर इससे सही होगा तो इसका मतलब यह होगा कि अगर मुझे क्लाइंट को io.connect() के बाद एक अनुचित उच्च लोड के साथ मिला है तो श्रोताओं की स्थापना के पहले कनेक्शन स्थापित किया गया है, इसलिए मैं परेशानी में पड़ रहा हूं क्योंकि श्रोता कभी आग नहीं लगाता ।

  • क्या यह सही है?
  • कैसे कर सकते हैं मैं सेटअप एक श्रोता कि दोनों ही मामलों में आग:
    1. कनेक्शन अभी तक स्थापित नहीं है जब श्रोता सेटअप
    2. कनेक्शन पहले से ही स्थापित है, जब श्रोता सेटअप
है

आप सादर धन्यवाद

+0

मुझे अब भी यही समस्या है, क्या आपने इस मुद्दे को हल किया? – Linek

+0

मैंने अपना वर्तमान समाधान उत्तर के रूप में पोस्ट किया। – ben

उत्तर

0
callBackOnConnect: function(socket, callback) { 
    if (socket.socket.connected) { 
     callback(); 
    } else { 
     socket.on('connect', function() { 
      callback(); 
     }); 
    } 
} 

AFAIK यह सुरक्षित है - हालांकि नहीं निश्चित रूप से सुंदर है।

0

हालांकि मुझे इसे प्रलेखन में नहीं मिला, लेकिन मैंने कुछ परीक्षण चलाए जो io.connect() के बाद क्लाइंट पर बहुत अधिक तनाव डालते थे। सभी मामलों में, अंतिम श्रोता की स्थापना के बाद ग्राहक की 'कनेक्ट' घटना अच्छी तरह से निकाल दी गई। उदाहरण के लिए: (जावास्क्रिप्ट देरी के लिए www.sean.co.uk करने के लिए धन्यवाद)

var socket = io.connect(); 

// www.sean.co.uk 
function pausecomp(millis) 
{ 
    var date = new Date(); 
    var curDate = null; 

    do { curDate = new Date(); } 
    while(curDate-date < millis); 
} 

//keeps processing for 5 seconds to simulate 
//any CPU-intensive process 
pausecomp(5000); 

//listener gets set up after delay 
socket.on('connect', function() { 
    //the time that the connect event is fired is compared 
    //with the listener's set up time 
    console.log(new Date().getTime() - setUpTime); 
}); 

//the time that the listeners are set up is logged 
var setUpTime = new Date().getTime(); 

हर बार जब मैं इस भाग गया, मैं एक सकारात्मक परिणाम है (न कि परिणाम बिल्कुल भी नहीं हो रही है की तुलना में) लॉग इन किया। दिलचस्प बात यह है कि विराम जितना अधिक होगा, सेटअप के बाद लंबे समय तक इसे 'कनेक्ट' करने के लिए लिया गया था। मुझे पता है कि यह प्रमाण नहीं है, लेकिन यह कम से कम सूचक है।

जब श्रोताओं को स्थापित किया जाना चाहिए, तब तक जब तक वे io.connect() के बाद आते हैं और वे कॉलबैक के अंदर नहीं होते हैं, तो सर्वर को 'कनेक्शन' ईवेंट से आग लगने से पहले सेट अप किया जाएगा, जो कि जहां तक ​​मैं बता सकता हूं क्लाइंट के 'कनेक्ट' ईवेंट से पहले आता है। मैं आभारी हूं कि कोई मुझे ऐसे संसाधन की दिशा में इंगित कर सकता है जो इन अंतर्निहित घटनाओं को कैसे और कब कहलाता है, लेकिन जहां तक ​​मैं कह सकता हूं कि वे इन चीजों के बारे में चिंता किए बिना काम करते हैं।

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