[ 
https://issues.apache.org/jira/browse/SSHD-781?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16223295#comment-16223295
 ] 

MayDay commented on SSHD-781:
-----------------------------

[~gnt], Thanks for answer me.

    As you comment,{color:#654982}" But if something wrong happen, such as a 
disconnect, the client should now be closed automatically."{color}. 

 1、   In my scene,I'm more concerned about client connection status changes in 
time when Client and server network unreachable.
    when the client  connect to server success and make the network between 
them unavailable, the client will not receive the close flag message from 
server,the client keepAlive should funtion in this scene,and  Identify 
connection anomalies in time,then to close the session.

 2、  In my mind about keeping alive: the client should set a keepAlive Interal 
and a timeout of KeepAlive,and the server should reponse to the heartbeat 
request. Actually,The {{NIO_READ_TIMEOUT}} seem work as {{the timeout of 
KeepAlive}}, the server reponse to the heartbeat which sended by client side 
can reset the read timeout.

 3、  What I wonder now is :
    why not  setting the response flag([RFC4254#Global 
Request#wantReply|https://tools.ietf.org/html/rfc4254]) true.If so, the 
{{HEARTBEAT_INTERAL}} and the {{NIO_READ_TIMEOUT}} in 
[ClientFactoryManager|https://github.com/apache/mina-sshd/blob/master/sshd-core/src/main/java/org/apache/sshd/client/ClientFactoryManager.java]
 can make the keepalive work well.


Above are some my understand about keeping alive, hope to get some answers from 
you to help me better use the MINA SSHD.



> The heartbeat task of client not support keepalive function well
> ----------------------------------------------------------------
>
>                 Key: SSHD-781
>                 URL: https://issues.apache.org/jira/browse/SSHD-781
>             Project: MINA SSHD
>          Issue Type: Question
>    Affects Versions: 1.4.0, 1.6.0
>         Environment: Any environment
>            Reporter: MayDay
>            Assignee: Guillaume Nodet
>              Labels: test
>             Fix For: 1.7.0
>
>
>  
>         The heartbeat request of sshClient is a SSH_MSG_GLOBAL_REQUEST, but 
> the default buffer of heartbeat set false (see 
> [ClientConnectService#sendHeartbeat|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java])
> {code:java}
> buf.putBoolean(false);
> {code}
>         The sshServer reponse the heartbeat by the 
> [KeepAliveHandler|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/server/global/KeepAliveHandler.java],
>  then [AbstractConnectionService 
> #sendGlobalResponse|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java].
> {code:java}
>  boolean wantReply = buffer.getBoolean();
> {code}
>        but if the buffer of heartbeat set false, then the sendGlobalResponse 
> will not reponse sshClient {color:#205081}because of the wantReply is 
> false{color} .(see [AbstractConnectionService 
> #globalRequest|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractConnectionService.java])
> {code:java}
> if (RequestHandler.Result.Replied.equals(result) || (!wantReply)) {
>             return new AbstractIoWriteFuture(req, null) {
>                 {
>                     setValue(Boolean.TRUE);
>                 }
>             };
> }
> {code}
> 1 、Is it a Bug(set the heartbeat buffer false default)? how the sshClient 
> know the server is available when the server don't response.
> I have test it whth create a client with params (
> HEARTBEAT_INTERAL = 60
> IDLE_TIMEOUT = 300
> NIO_READ_TIMEOUT = 315)and a server, and the client will close seesion after 
> the NIO_READ_TIMEOUT.
> 2、If the client reach the NIO_READ_TIMEOUT, then thows a 
> {color:#8eb021}InterruptedByTimeoutException{color},and close the session.But 
> the task of heratbeat not stoped, it will continue to run even though it will 
> not send packet.See the 
> [ClientConnectionService 
> #startHeartBeat|https://github.com/apache/mina-sshd/blob/693fa5d90f54676de6655954046a8a4f5d09728a/sshd-core/src/main/java/org/apache/sshd/client/session/ClientConnectionService.java]
> {code:java}
> service.scheduleAtFixedRate(this::sendHeartBeat, interval, interval, 
> TimeUnit.MILLISECONDS);
> {code}
> if the sshClient reopen a new session and close it many times,the number of 
> invalid scheduling heartbeat  task will become very large, it's not  
> equitable.
>          



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to