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

Goldstein Lyor commented on SSHD-781:
-------------------------------------

{quote}
I hope the heartbeat can work the same way. If set the wantReply of heartbeat 
true, Any server that follows the SSH protocol will response the heartbeat of 
our client(even though SSH_MSG_FAILED)
{quote}
I am not so sure this will happen - what if a server has protection against 
"white noise" - i.e., too many {{SSH_MSG_FAILED}} make it suspect the client is 
trying some kind of DDOS and closes the session. ? You want a keep-alive 
mechanism that does not abuse the protocol - which in this case (IMO) it does. 
In any case, if I understood your description correctly, increasing 
{{NIO_READ_TIMEOUT}} and registering a _SessionListener_ should provide you 
with what you need.

{quote}
just want the client keepalive can be compatible better with server implemented 
in different languages
{quote}
I am not convinced your suggestion accomplishes that by abusing the protocol

> 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