[
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)