Hi, Emmanuel

You are right. in most simple cases, there is no need to offer heart beat 
mechanism, because MINA already provides network exception handle logic for 
programmer to customization.
I mean, IoHandler.exceptionCaught() could be the right place to process most 
exception cases, including the exception when write bytes to a closed or 
invalid socket channel.

Sure, as you suggest, detect if socket is open or not seems like a good way. 
But, please notice that it can't guarantee that the network packet can arrive 
to other peer because of
other kind of network errors. E.g. Throtting, internal exception like that. So, 
I strongly recommend to use exceptionCaught() method to perform network 
exception handling.

BR

-----Original Message-----
From: Emmanuel Lecharny [mailto:[EMAIL PROTECTED] 
Sent: Thursday, September 11, 2008 2:58 PM
To: [email protected]
Subject: Re: About the time limit of connection keeps valid from standby mode

Hi,

you may also decide not to use a heart beat mechanism at all, but simply use 
the sent message to check if the connection is still open or not. If it's not, 
you will get an exception, then you can handle this exception, reopen the 
connection, and resend the data.

Anyway, Wentrui Guo is right : it's all about adopting the strategy which fits 
best with your application.

Wenrui Guo wrote:
> 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/
>>     
>
>   


--
--
cordialement, regards,
Emmanuel Lécharny
www.iktek.com
directory.apache.org


Reply via email to