首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Mina空闲监视器

Apache Mina空闲监视器
EN

Stack Overflow用户
提问于 2012-04-04 00:44:29
回答 3查看 5.9K关注 0票数 2

我一直在用Apache Mina开发我的第一个基于TCP/Socket的应用程序,它看起来很棒,做事情也很容易。我只想问一个关于米娜的问题。

服务器设置5秒的空闲时间将终止套接字连接,因此我们必须发送周期性的心跳(回显消息/保持连接)以确保连接处于活动状态。一种保活机制。

有一种方法是我们在每5秒之前发送一次盲目的回应/心跳消息。我在想,应该有智能/智能的方式“空闲监视器”如果我正在发送我的业务消息,而不是到达空闲时间,即5秒,我不应该发出心跳消息。在整个连接空闲的情况下发送心跳报文,节省了带宽,提高了socket的读写速度。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-05 18:19:10

你可以通过使用Keep Alive Filter (已经存在于mina中)来实现它。

或者,您可以通过设置客户端的会话空闲超时略小于服务器的空闲超时来实现更智能的回声/心跳发送方式。例如:

对于服务器端

代码语言:javascript
复制
NioSocketAcceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 5);

而对于客户端来说,它将是

代码语言:javascript
复制
NioSocketConnector.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 3);

现在,假设有3秒没有通信,客户端将触发一个sessionIdle (并且不会在服务器端触发,因为超时有5秒),您可以发送一个回应。这将使会话保持活动状态。只有当会话空闲时,才会发送回送。

注意:我假设在会话空闲时,会话在服务器端被关闭。如果是另一种情况,您将需要切换会话空闲超时值(例如,对于服务器为3秒,对于客户端为5秒),并且将从服务器发送回应。

票数 4
EN

Stack Overflow用户

发布于 2012-04-04 01:19:05

我不确定我是否完全理解您的问题,但是您可以在IoHandlerAdapter的被覆盖的sessionIdle方法中发送心跳。您不需要仅仅因为服务器端的Mina调用Idle就关闭会话。至于一种更智能的方式来维护服务器和客户端之间的活动连接,而不需要这种类型的心跳通信,我从来没有听说过这种方式。

这里有一个关于微软如何在ActiveSync中处理心跳的有趣读物。在我的客户机/服务器应用程序中使用mina时,我亲自使用了这种方法。希望这对你有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-07-02 12:53:50

(我希望我正确理解了这个问题)

我很难保持会话的活力,这个问题出现在谷歌搜索结果中,所以我希望其他人能发现它是有用的:

代码语言:javascript
复制
    @Test
    public void testClientWithHeartBeat() throws Exception {
        SshClient client = SshClient.setUpDefaultClient();
        client.getProperties().put(ClientFactoryManager.HEARTBEAT_INTERVAL, "500");
        client.start();
        ClientSession session = client.connect("localhost", port).await().getSession();
        session.authPassword("smx", "smx").await().isSuccess();
        ClientChannel channel = session.createChannel(ClientChannel.CHANNEL_SHELL);

        int state = channel.waitFor(ClientChannel.CLOSED, 2000);
        assertTrue((state & ClientChannel.CLOSED) == 0);

        channel.close(false);
        client.stop();
    }

(来源:https://issues.apache.org/jira/browse/SSHD-185)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9997748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档