2013-01-03 3 views
6

कई कारणों से, जब सिग्नल कनेक्शन स्थापित होता है, तो मैं अपने डेटास्टोर में कनेक्शन कनेक्शन संग्रहीत कर रहा हूं। हालांकि, उन कनेक्शन रिकॉर्ड्स अनाथ हो सकते हैं, उदाहरण के लिए, अगर सिग्नल पुनरारंभ होता है। (मैंने व्यवहार को भी देखा है जो मुझे आश्चर्यचकित करता है कि ऑनडिस्कनेक्टेड() को सही तरीके से बुलाया जा रहा है, हालांकि मुझे इसके बारे में कम यकीन है।)एक सिग्नल कनेक्शन को देखते हुए, क्या मैं बता सकता हूं कि वह सत्र अभी भी जुड़ा हुआ है या नहीं?

लेकिन किसी भी कारण से, मैं समय-समय पर अपने डेटाबेस में रिकॉर्ड के साथ समाप्त होता हूं अनाथ, और मैं उनको छेड़छाड़ करने में सक्षम होना चाहता हूं, और सूचीबद्ध किसी भी कनेक्शन आईडी को हटा दूंगा जो वास्तव में अब कनेक्ट नहीं है - संभवतः सिग्नलआर होने से मुझे बताएं कि यह कनेक्शन आईडी अभी भी लाइव सत्र से जुड़ा हुआ है या नहीं।

मैंने सिग्नलआर स्रोत को देखा है, और यह मेरे ऊपर छलांग नहीं लगा रहा है कि इसे कैसे पूरा किया जाए। क्या ऐसा करने का कोई उचित तरीका है?

उत्तर

4

इसे पूरा करने का तरीका ग्राहकों को ट्रैक करना है। आपकी पोस्ट से ऐसा लगता है कि आप पहले ही ऐसा कर रहे हैं (अभी भी अगर आप नहीं हैं तो कोड प्रदान किया गया है) लेकिन क्लाइंट कनेक्ट होने पर यह जानने का एकमात्र तरीका है। सिग्नलआर सर्वर ऑनकनेक्टेड/ऑनडिस्कनेक्टेड इवेंट्स को यह इंगित करने के तरीके के रूप में ट्रिगर करता है कि क्लाइंट कनेक्ट है या नहीं।

मैं यह सुनिश्चित करने की अनुशंसा करता हूं कि आप अपने डेटाबेस में रिकॉर्ड्स को फिर से कनेक्ट करने पर रिकॉर्ड्स को पुनः चालू नहीं कर रहे हैं।

उदाहरण (सुपर सरल उदाहरण) के लिए:

class myHub 
{ 
    private static List<String> _connectedClients = new List<String>(); 

    public override Task OnConnected() 
    { 
     _connectedClients.Add(Context.ConnectionId); 
     return base.OnConnected(); 
    } 

    public override Task OnDisconnected() 
    { 
     _connectedClients.Remove(Context.ConnectionId); 
     return base.OnDisconnected(); 
    } 

    public static bool IsConnected(string cid) 
    { 
     return _connectedClients.Contains(cid); 
    } 
} 

अब आप हब पर IsConnected फोन करके तय करें कि एक कनेक्शन आईडी वर्तमान में जुड़ा हुआ है सकते हैं।

+0

यह मूल रूप से मैं अब क्या कर रहा हूं, लेकिन ऐसा लगता है कि यह सही तरीके से काम नहीं कर रहा है। हो सकता है कि यह 98% बार करता है, लेकिन हर बार, मैं अपने सभी ब्राउज़र को अपने देव मशीन पर बंद कर दूंगा, और फिर जब मैं अपने कमरे में वापस जाऊंगा, तो यह आश्वस्त होगा कि मेरे संस्करण में अभी भी कुछ है '_connectedClients', भले ही सब कुछ साफ़ किया जाना चाहिए था। मेरे पास इसके लिए एक रेपो नहीं है, हालांकि, यह आपके लिए बहुत मदद नहीं करता है। मैं आपको बता दूंगा कि क्या मैं यह समझ सकता हूं कि यह क्या ट्रिगर करता है - या यदि (शायद अधिक संभावना है) यह मेरी तरफ एक बग है। –

+0

@ एन। टेलर मुलेन क्यों आपका आखिरी शून्य वापसी बूल मूल्य ?? –

+0

@aliyouhannaei कोई कारण नहीं, बस एक असफल कोड स्निपेट। बस इसे अद्यतन किया। –

-1

कनेक्शन संग्रह करना डीबी में अच्छा तरीका नहीं है। सिग्नल प्रत्येक पृष्ठ के लिए एक नई आईडी असाइन करेगा। इस sample of Kevin W. Griffin

0

यह मेरे साथ भी होता है, समय-समय पर मैं अनाथ कनेक्शन का पता लगाता हूं।

एक काम के रूप में चारों ओर, मैं एक क्लाइंट साइड समारोह, $ (विंडो) .unload जो क्या डिस्कनेक्ट ..

आशा है कि यह मदद करता है करने के लिए माना जाता है करता है कि एक सर्वर साइड समारोह का आह्वान गयी।

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

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