Hi, Allen In fact, you refer a very common question on strategy about How to program the heart-beat logic. I'll explain the topic in detail thus you can choose the best way for you.
>From the perspective of direction, heart beat can be divided into two >categories: Bidirectional or Undirectional. Which means if each peer on the >communication channel should Send out heart beat package to the other side or not. If both of client and servier side need to send out hear beat, then we call it Bidirectional, otherwise Undirectional. Of course, Undirectional is the simplest way as you see because less effort to implement it. Heat beat can be separated to other ways by when the heat beat need to be issued. Some sorts of commercial protocol choose fixed interval to produce heart beat packet, individual thread is absolutely most intuitive candidate. But for other cases, I strongly recommend you to select another way, because in my opinion it conforms to the spirit of hear beat and moreover, also be a better performance manner. Sure, that's also an easy way because MINA already integrate the feature with core framework. As you know, sessionIdle() is triggered by IdleStatusChecker that is a separate daemon thread keep on running during the lifetime of MINA application. If idle events arise, either because of read event or write event, sometimes maybe both read/write event, heart beat should be sent to detect if the other peer is still alive. If no associated heart beat response message is received, then mark the situation and try to resend once more, until you believe the other side is not exist anymore. In conclusion, depends on strategy you like, there are many ways available. The way you choose really depends on the situtation and what do you want to achieve. BR anderson -----Original Message----- From: Allen Jiang [mailto:[EMAIL PROTECTED] Sent: Thursday, September 11, 2008 2:03 PM To: Wenrui Guo Cc: [email protected] Subject: Re: About the time limit of connection keeps valid from standby mode hi,Anderson Guo, if we use heart-beat detection mechanism,is it suitable to send heart-beat when the session is idle as follows: public void sessionIdle(IoSession iosession, IdleStatus idlestatus){ heartBeat(); } if not,should we new a thread to use heart-beat detection mechanism ? Best Regards Allen Jiang ----- Original Message ----- From: "Wenrui Guo" <[EMAIL PROTECTED]> To: <[email protected]> Sent: Thursday, September 11, 2008 1:50 PM Subject: RE: About the time limit of connection keeps valid from standby mode I am not sure if I understand your issue, but I would like to share my opinion with you about it: First of all, Mina is suitable for both long-term and short-term connection oriented programming. Long-term connections means lifetime of the connection will last from begin to end, usually the communication protocol should has operations that responsible for session create, session keepalive, session close. On the other hand, short-term connections, just like http connections, created before http request is issued, till received corresponding http response. (But for the purpose of performance, most programmer choose to open keep-alive option to maintain the http connection between client and server). Second, network related exceptions really exists during the communication phase, no matter what kind of connection manner you adoptm, so MINA provides exception listener method to allow programmers to process exception condition and recovery from it. Limited-retry , forget and continue are most popular approaches to handle such cases. Finally, MINA is java-based network programming framework in nature, there is no way to know whether computer system is waken up from sleep mode. So I suggest the method to deal with connection invalid case is just encapsulate your source code to detect network io exceptions and try to resend your information again. BTW, you mentioned that you connection maybe last for about 10 minutes, therefore I guess that program written by you is towards long-term connection, so please also adopt heart-beat detection mechanism inside you software. Best Regards Anderson Guo -----Original Message----- From: Allen Jiang [mailto:[EMAIL PROTECTED] Sent: Thursday, September 11, 2008 1:17 PM To: [email protected] Subject: Re: About the time limit of connection keeps valid from standby mode Hi,李 翠竹, Maybe you could check whether you have set the session to be closed when the session's idle event is activated in your server site. Yahoo ID:allen_jiangguilong ----- Original Message ----- From: "李 翠竹" <[EMAIL PROTECTED]> To: <[email protected]> Sent: Thursday, September 11, 2008 9:48 AM Subject: About the time limit of connection keeps valid from standby mode > > Hi, > I found the mina connection sometimes keeps valid, but sometimes goes invalid > after the computer resumes from standby mode. > My test case is like this: > OS:Microsoft Windows XP,Professional,Version 2002,Service Pack 2 > Mina version:2.0.0-M1 > Step: > 1)My client program creates a connection to a server by using SocketConnector. > 2)The computer on which my client program runs enters standby mode and the > active connections are disconnected. > 3)Bring the computer out of standby mode after a time. > I found the connection would be valid or invalid, according to the standby > time. > If standby time is less than a period time(about 10 minutes), the connection > still keeps valid and can send /receive datas. > Else, the connection goes invalid and gets the fllowing exception when it > attempt to send datas. > java.io.IOException: An existing connection was forcibly closed by the remote > host. > > I want to learn: > 1)How to calculate the time limit (about 10 minutes in my case) after which > the connection become invalid in windows standby mode? > 2)Could I set this time limit? > > Thanks, > Li > > _________________________________________________________________ > 秋本番!�B休たくさんのこの秋、みんなのオススメ�L末旅行をチェックしよう > http://clk.atdmt.com/GBL/go/112813570/direct/01/
