`
cuisuqiang
  • 浏览: 3959052 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3669102
社区版块
存档分类
最新评论

Mina重连 千万别这么干

阅读更多

以前写了一篇介绍Mina简单示例的文章:Mina TCP服务端客户端 示例

在初始化客户端连接的时候,我是在构造方法里面写的:

public MinaTcpClient() {
	connector = new NioSocketConnector();
	connector.setHandler(this);
	ConnectFuture connFuture = connector.connect(new InetSocketAddress("localhost", MinaTcpServer.PORT));
	connFuture.awaitUninterruptibly();
	session = connFuture.getSession();
	System.out.println("TCP 客户端启动");
}

 

那客户端会有中断的情况,那就得重连吧,怎么重连,马上想到的就是不断创建MinaTcpClient对象,或者把Mina的对象都重新创建一次。

是的,我就是这么干的,当时确实没注意。后来发现,总是死机,现象是Tomcat没有死,而是该程序宕机了。

我开始认为是其他问题,后来使用JDK自带的jconsole查看(如果默认安装,路径是C:\Program Files\Java\jdk1.6.0_06\bin\jconsole.exe),发现对象一直在无限制增加,而内存和CPU却没有太多的变化,加上每次都是服务端宕机时这边才会出现宕机,我在想应该就是不断重连带来的问题。

我尝试把一些方法内的变量提取到类里面,使用时再进行NEW操作,可是仍然不能解决问题。偶然看到NioSocketConnector这个对象,联想到JDBC连接池,我貌似找到了问题的所在。

于是我把NioSocketConnector实例对象单例化,只是通过NioSocketConnector对象的connect方法不断获取ConnectFuture然后来获得会话,等于整个过程我不会自己去NEW对象。

测试后发现问题解决。

这里就先说一下问题现象和问题是怎么解决的吧,后续我们再继续讨论这个问题。

 

请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/ ! 

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

3
3
分享到:
评论
6 楼 davidafairy 2015-09-06  
connector.setHandler中
        if (isActive()) {
            throw new IllegalStateException("handler cannot be set while the service is active.");
        }

单例有会有如上代码限制 不敢直接注释掉 怕有后患。楼主有什么想法?
5 楼 davidafairy 2015-09-06  
把NioSocketConnector实例对象单例化,只是通过NioSocketConnector对象的connect方法不断获取ConnectFuture然后来获得会话,等于整个过程我不会自己去NEW对象

能贴下这段代码吗?谢谢
4 楼 s33ker 2014-08-08  
http://www.oschina.net/question/1168562_164367
帮看下这个问题吧
3 楼 lanqiu17 2014-02-12  

对啊,我们没有对数据分包,直接传输的数据对象。这个把我头都搞大了,我再去看看怎么分包, 谢谢
2 楼 cuisuqiang 2014-02-12  
lanqiu17 写道
楼主,请问使用mina传输大数据总是 报连接超时怎么处理?
谢谢

是不是因为数据量大引起了网络堵塞?那就需要分包了
1 楼 lanqiu17 2014-02-11  
楼主,请问使用mina传输大数据总是 报连接超时怎么处理?
谢谢

相关推荐

    mina连接 mina心跳连接 mina断线重连

    在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina连接"。在Mina中,连接是指客户端与服务端之间建立的通信链路。它支持多种传输协议,如TCP/IP(Socket)...

    MINA断线重连死锁解决

    当我们遇到"MINA断线重连死锁解决"的问题时,通常涉及到的是网络连接的稳定性和并发处理的复杂性。 MINA框架提供了非阻塞I/O模型,允许处理大量并发连接。然而,在某些情况下,特别是在断线重连的机制中,可能会...

    Mina实现长连接和短连接实例

    Apache Mina是一个流行的Java框架,专门用于简化和优化网络应用开发,它支持多种协议如TCP/IP、UDP/IP等,并提供了长连接和短连接的支持。在这个实例中,我们将探讨如何使用Mina实现长连接和短连接。 首先,理解长...

    Mina长连接短连接实例

    在IT行业中,网络通信是至关重要的一个领域,而Apache Mina作为一个高性能、事件驱动的网络应用框架,广泛应用于TCP、UDP等协议的开发。本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和...

    MINA长连接框架实现通讯

    Android客户端需要处理好网络权限问题,并考虑到移动设备的网络环境可能变化,需要适当地处理网络断开和重连的情况。 4. **MINA的过滤器机制**:MINA的FilterChain允许开发者插入自定义的过滤器,每个过滤器可以...

    socket通信,mina长连接通信

    Socket通信和MINA长连接是网络编程中的两个关键概念,主要应用于服务器与客户端之间的数据交互。在移动应用开发,特别是需要实时推送功能时,这两种技术显得尤为重要。 **Socket通信** Socket,也称为套接字,是...

    Mina+Socket通信

    Mina和Socket是两种常见的网络通信框架和技术,它们在Java编程环境中被广泛使用。本篇文章将深入探讨如何使用Mina与Socket实现通信,并提供客户端和服务端的实现代码概述。 Mina(全称“MINA: Minimalistic ...

    mina通信demo

    **Mina通信框架详解** Apache Mina 是一个高度可扩展且功能丰富的网络应用开发框架,主要用在Java环境中。这个“Mina通信demo”是为了帮助初学者理解和掌握Mina的基本用法而创建的。通过分析这个demo,我们可以深入...

    mina 长连接 客户端+服务端

    Mina 是一个强大的开源框架,主要用于构建网络应用,如服务器和客户端。在Java环境中,它提供了高效的、事件驱动的网络应用程序框架,支持TCP和UDP协议,适用于开发高性能、高并发的网络服务。在这个"mina 长连接 ...

    mina的高级使用,mina文件图片传送,mina发送文件,mina报文处理,mina发送xml和json

    Apache Mina是一个开源的网络通信应用框架,主要应用于Java平台,它为高性能、高可用性的网络应用程序提供了基础架构。在本文中,我们将深入探讨Mina的高级使用,特别是在文件图片传送、文件发送、XML和JSON报文处理...

    Android-MinaSocket一款基于Mina的Socket长连接库

    - **连接管理**:保持长连接需要考虑网络波动、设备休眠等因素,确保在异常情况下能自动重连。 - **心跳机制**:为了检测连接是否断开,通常需要设置心跳包,定时发送和接收,防止连接因长时间无数据传输而被网络...

    mina socket客户度工程相关类

    1.mina socket客户度工程相关类,添加mina jar包后可独立运行。 2.mina若有空闲连接则使用已有连接,若无则新建mina连接; 3.mina空闲连接超过保活时间25分钟后,自动删除; 4.mina发送指令后,接收指定时长内收到的...

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    MINA_API+MINA_DOC+mina

    MINA (Java IO Network Application Framework) 是一个由Apache软件基金会开发的开源网络通信框架,主要应用于构建高性能、高可用性的网络服务器。这个压缩包包含了MINA API文档、自学手册以及开发指南,对于学习和...

    mina心跳包机制

    如果服务器在一段时间内没有收到心跳包,可能会认为客户端已经断开,从而触发相应的处理逻辑,比如关闭连接或者触发重连机制。 在Mina的配置中,开发者可以通过设置Filter链来实现心跳包的处理。例如,可以创建一个...

    使用MINA实现长连接

    MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专门设计用于构建高性能、高可用性的网络应用程序,尤其适合TCP和UDP协议的长连接应用。它提供了异步I/O模型,可以处理大量的并发...

    Android端集成Mina框架实现长连接,完美解决断线重连问题,修复断线重连打开多端口问题.zip

    本资料包主要关注如何在Android端集成Mina框架,并解决断线重连及多端口问题。 首先,Mina框架是Apache软件基金会的一个项目,它提供了一个事件驱动、异步的I/O模型,使得开发者可以构建高性能、高可用性的网络应用...

    mina demo mina jar包

    Apache Mina是一个开源项目,它提供了一个高度可扩展的网络通信框架,用于简化开发高性能、高可用性的网络服务器和客户端应用程序。"Mina demo mina jar包"指的是使用Apache Mina框架创建的一个演示示例,这个示例...

    基于Apache Mina实现的TCP长连接和短连接实例

    根据异常类型,可以选择重连、关闭连接或记录错误日志。 5. **客户端连接**:在客户端,同样需要配置`ClientBootstrap`,并通过`connect()`方法建立到服务器的连接。对于长连接,客户端也需要实现心跳机制。 在...

    Mina开发实例(服务端、客户端)DEMO

    Apache Mina是一个高度可扩展的网络通信框架,它允许开发者创建高性能、高效率的服务端和客户端应用程序。在Java世界中,Mina以其简洁的API和灵活性而受到青睐,尤其适用于处理大量的并发连接,如TCP/IP和UDP协议。...

Global site tag (gtag.js) - Google Analytics