2012-01-09 10 views
10

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

उत्तर

13

अगर मैं आपकी समस्या को सही ढंग से समझ में आ: आप के लिए ग्राहक चैनल सर्वर साइड में होने वाली घटनाओं को बंद कर दिया सुनने और कुछ सत्र सफाई करना चाहते हैं,

वहाँ Netty में चैनल की घटनाओं को बंद कर दिया के लिए सुनने के लिए दो तरीके हैं:

1) आपके सर्वर हैंडलर SimpleChannelHandler/SimpleChannelHandler फैली है, तो आप निम्न विधि ओवरराइड कर सकते हैं और वहाँ

public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception; 

2 अपने सत्र सफाई तर्क बारे में) आप चैनल संदर्भ के लिए केवल उपयोग किया है, तो आप कर सकते हैं जी एट चैनल पास भविष्य और, आपका सत्र सफाई तर्क के साथ ChannelFutureListener अपने क्रियान्वयन रजिस्टर

ChannelFuture closeFuture = channel.closeFuture(); 

closeFuture.addListener(new ChannelFutureListener() { 
    @Override 
    public void operationComplete(ChannelFuture future) throws Exception { 
     //session cleanup logic 
    } 
}); 
+3

ठीक है, मैंने चैनलक्लोज्ड विधि लागू की है, और जब उपयोगकर्ता एप्लिकेशन को उदाहरण बंद कर देता है तो यह ठीक काम करता है, लेकिन यदि उपयोगकर्ता बस अपने वाईफाई कनेक्शन को नुकसान पहुंचाता है, तो इस विधि को नहीं कहा जाता है। –

+2

तो एक इष्टतम पढ़ने निष्क्रिय टाइमआउट के साथ एक IdleStateHandler जोड़ने के लिए बेहतर है। यदि उपयोगकर्ता उस समय से अधिक निष्क्रिय है, तो शायद यह कनेक्शन खो गया मामला हो सकता है, इसलिए अपने सर्वर हैंडलर से IdleStateEvent पर कनेक्शन बंद करें। –

+3

नेटटी के नए संस्करणों में, 'getCloseFuture() '' CloseFuture() 'लगता है – childofsoong

1

चेक सत्र id और पुनः मध्यस्थता अनुमति देते हैं। या आप कुकी नियंत्रक की तरह कुछ उपयोग कर सकते हैं। क्या मैं विषय प्रश्न पूछ सकता हूं: आईओएस पर आपका ग्राहक नेटटी सर्वर से कैसे इंटरैक्ट करता है? (क्या ढांचे आप क्लाइंट की तरफ उपयोग करते हैं, और क्या विकोडक/एनकोडर उपयोग?)

3

उपयोग IdleStateHandler

आप पता लगा सकते हैं जब वहाँ निश्चित समय अंतराल में कोई अनुरोध/प्रतिक्रियाओं।

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