java - अपाचे MINA सर्वर 60 के बाद सक्रिय यूडीपी "सत्र" बंद करता है



network-programming udp (1)

मेरा क्लाइंट-सर्वर ऐप अपाचे MINA, क्लाइंट और सर्वर दोनों पक्षों के साथ काम करता है। यूडीपी के माध्यम से डेटा भेजना ठीक है, लेकिन एक मिनट के सर्वर के बाद कनेक्शन बंद हो जाता है (या मिना का तरीका - "सत्र") और उत्तर देना बंद कर देता है।

अजीब बात यह है कि कनेक्शन पूरे समय सक्रिय है। ग्राहक प्रत्येक 1000ms डेटा भेज रहा है और उसी के साथ सर्वर उत्तर देता है। मैंने निष्कर्ष निकाले जाने वाले निष्क्रिय सत्रों को नष्ट करने के लिए MINA की व्यवस्था पाया है, इसे सत्र के समय-से-लाइव public static final int DEFAULT_TIME_TO_LIVE = 60; लिए एक डिफ़ॉल्ट मान मिल गया है public static final int DEFAULT_TIME_TO_LIVE = 60; लेकिन मुझे यह पता नहीं चला है कि कैसे इसे बदलने के लिए या बेहतर, सत्रों के लिए समय-से-लाइव अद्यतन करें

इम्हो हर इनकमिंग पैकेट के साथ समय-समय पर स्वचालित रूप से अपडेट होना चाहिए लेकिन मुझे कोई चीज़ नहीं मिली, यह मेरा सर्वर क्यों नहीं कर रहा है? क्या मैं स्पष्ट रूप से कहना चाहूँगा कि मैं नहीं चाहता कि वह सत्र को अभी भी नष्ट करे या क्या?

मेरा कोड MINA के ट्यूटोरियल के समान है:

सर्वर

IoAcceptor acceptor = new NioDatagramAcceptor();
try {
    acceptor.setHandler( new UDPHandler() );
    acceptor.bind( new InetSocketAddress(RelayConfig.getInstance().getUdpPort()) );

    acceptor.getSessionConfig().setReadBufferSize( 2048 );
    acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, IDLE_PERIOD );
    System.out.println("RELAY ["+RelayConfig.getInstance().getId()+"]: initialized!");
} catch (IOException e) {
    System.out.println("RELAY ["+RelayConfig.getInstance().getId()+"]: failed: "+e.getLocalizedMessage());
    //e.printStackTrace();
}

ग्राहक

NioDatagramConnector connector = new NioDatagramConnector();
connector.getSessionConfig().setUseReadOperation(true);

handler = new UDPHandler();
connector.setHandler(handler);
connector.getSessionConfig().setReadBufferSize(2048);

// try to connect to server!
try {
    System.out.println("Connecting to " + relayIP + ":" + port);
    ConnectFuture future = connector.connect(new InetSocketAddress(relayIP, port));
    future.addListener(new IoFutureListener<IoFuture>() {

        public void operationComplete(IoFuture future) {
            ConnectFuture connFuture = (ConnectFuture)future;
            if( connFuture.isConnected() ){
                UDPClient.setSession(future.getSession());

                Timer timer = new Timer("MyTimerTask", true);
                timer.scheduleAtFixedRate(new MyTimerTask(), 1000, 1000);  // My message is written here every 1000ms
            } else {
                log.error("Not connected...exiting");
            }
        }
    });
    future.awaitUninterruptibly();
} catch (RuntimeIoException e) {
    System.err.println("Failed to connect.");
    e.printStackTrace();
    System.exit(1);
} catch (IllegalArgumentException e) {
    System.err.println("Failed to connect. Illegal Argument! Terminating program!");
    e.printStackTrace();
    System.exit(1);
}

किसी भी अतिरिक्त जानकारी के लिए कृपया टिप्पणी लिखें

संपादित करें: दुर्भाग्य से मेरे पास उस सर्वर पर अब तक पहुंच नहीं है, लेकिन समस्या फिर से हल नहीं हुई थी। यदि कोई और कोई है जो एक ही समस्या है और इसे सुलझाया है, तो हमें बताएं


मैंने कुछ शोध किया और नीचे दिए गए लिंक को मिला। आपको स्पष्ट रूप से डिस्कनेक्ट विकल्प झूठी सेट करने की आवश्यकता हो सकती है, लेकिन टाइमआउट विकल्प को रीसेट करने का दूसरा विकल्प भी है। 30000 का समयबाह्य 30 सेकंड है, 60000 60 सेकंड है, आदि ... ये समाधान MINA2 से हैं। यह स्पष्ट नहीं था कि आप उस पुरानी संस्करण का उपयोग कर रहे थे या नहीं। इस से आप उस कॉल को जोड़ने में समर्थ होना चाहिए, जो आपके द्वारा यूडीपी पोर्ट खोलते समय विशिष्ट विकल्प सेट करता है।

MINA2 दस्तावेज़ीकरण





apache-mina