开发者社区> 问答> 正文

mina udp服务端,老是会在1分钟的时候主动断开客户端是什么原因:报错

服务端是NioDatagramAcceptor,当有udp客户端发数据之后,1分钟之内如果客户端没有再发数据的话,mina就会断开这个session,然后调用sessionClosed方法,导致我服务端想在1分钟之后往客户端发送数据都没法发了,session.isConnected为false.我设置了idleTime,writeTimeout,BothIdleTime等等这些超时值但全都无效,只要客户端在1分钟之内没有再发数据的话,mina就会断开它,不知道这是什么原因,怎样才能不让mina断开客户端.

我的mina版本是m6的.

展开
收起
kun坤 2020-06-06 23:10:46 714 0
1 条回答
写回答
取消 提交回答
  • 估计不是mina断的吧

    有可能是客户端断的

    一般长连接都会有心跳,防止长时间没有数据断开

    ######

    不是客户端断的,我同样的客户端连到socket udp工具上就不会被断开

    ######

    好象java nio是有些参数是不支持的

    我还是建义做心跳吧

    这样无论什么客户端什么服务器都没有这个问题

    ######

    加心跳机制确实可以解决了.

    不过我奇怪我原来的客户端也是要手动发数据的,不会主动发心跳包.那些UDP工具他们是怎么保持连接的.

    ######

    而且我设置了idleTime,writeTimeout,BothIdleTime等等这些超时参数,但时间到了sessionIdle方法并没有被执行,不知道是不是mina的bug

    ######

    udp是无连接的,在udp通信中,服务端收到消息后,write到客户端后,就会关闭该对象,释放资源

    ######

    acceptor.setSessionRecycler(new ExpiringSessionRecycler(120));

    120单位是秒

    2020-06-06 23:10:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
TCP Cluster for mqtt技术实施方案 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载