MINA框架详解与应用实践

需积分: 9 1 下载量 148 浏览量 更新于2024-09-08 收藏 67KB DOC 举报
"MINA框架是基于Java NIO的网络通信框架,它简化了NIO编程的复杂性,隐藏了许多底层细节,使开发者能够更专注于业务逻辑。MINA提供了高度可扩展性和高性能的网络应用程序开发环境。本文档是对MINA框架使用的一次总结,通过一个示例介绍了如何初始化MINA Acceptor并配置过滤器链。" 在Java NIO (非阻塞I/O)的世界里,MINA框架是一个重要的工具,它为开发面向服务的架构提供了便利。MINA的核心组件是`Acceptor`,它负责监听客户端连接并处理网络通信。在描述中提到的`NioSocketAcceptor`是MINA实现的一种Acceptor,用于处理TCP/IP协议的连接。 初始化MINA Acceptor时,首先创建一个`NioSocketAcceptor`实例,如代码所示,这里的参数5表示最大连接队列长度。然后,创建一个固定大小的线程池,`ExecutorFilter`将用于处理接收到的任务,确保网络操作不会阻塞主线程。线程池的大小(1500)可以根据实际需求进行调整。 接下来,添加过滤器(Filter)到过滤器链中,这是MINA处理网络事件的关键机制。`ExecutorFilter`将请求分发到线程池执行,确保并发处理。`ProtocolCodecFilter`是另一个重要的过滤器,用于解码和编码网络消息,这里使用了自定义的`WebDecoder`和`WebEncoder`来处理特定的协议格式。 `LoggingFilter`是日志记录过滤器,通过设置不同的日志级别,可以记录异常、消息接收、发送、会话关闭和创建等事件,这对于调试和监控网络应用非常有用。 在实际项目中,可以根据需要添加更多的过滤器,例如身份验证过滤器、性能监控过滤器等,来增强系统的功能和安全性。MINA的灵活性在于可以通过组合过滤器和自定义处理器来构建复杂的网络应用程序。 总结来说,MINA框架提供了高效的网络通信基础设施,简化了NIO编程,并允许开发者通过配置过滤器链来实现各种网络应用的需求。由于其强大的扩展性和性能,MINA被广泛应用于大规模分布式系统、在线游戏服务器、物联网(IoT)等领域。而Netty作为MINA的后继者,继承了MINA的优点,进一步优化了性能和易用性,成为了Java NIO领域的首选框架。
2019-04-09 上传
Mina介绍:https://blog.csdn.net/haoranhaoshi/article/details/89102597 工程内容介绍(由浅入深,稳扎稳打): test1:建立Server和Client。有Client加入,Server广播给所有Client。 test2:在控制台中Server可以给所有Client发送数据,Client可以给Sever和其他Client发送数据。 test3:(1)特定角色的Client处理消息。 (2)特定角色的Client收到消息。 Client与Server建立Session后,Server存储Client的Role和Session映射(同一个角色可映射多个Session)。角色Role在MinaClientHandler中。修改Role,启动多个Client测试。Client在控制台中Role:Message的格式给对应Role的Client发送Message。 test4:(1)Client启动时如果没有Server,就先建立Server。在test3(2)基础上修改MinaClient的session = future.getSession();即可。 (2)如果建立Server的Client离开了,让另一个Client建立Server。 (3)Client给Server发送数据,如果失败,重新发送。 test5:一个Client有一个Server。Client和其他Client的Server建立Session。 test6:如果Client连接Server失败,就只建立Server,如果Server离开,第一个检测到的Client建立Server。 一个进程中包括Server和Client,进程A和B通信,Server负责接收另一个进程的消息,Client负责发送给另一个进程消息,无需Server独立启动,或者绑定在一个进程中,保证最后离线,或者绑定在一个进程中,进程离线后绑定在其他进程中。把Client中的OWN_SERVER_PORT和ANOTHER_SERVER_PORT调换后启动另一个进程,即可测试。 test7:解决相同角色,分工不同: (1)连接建立时传角色,同一个角色,多个Client,连接时间区分Client (2)连接建立时传角色和功能ID,功能ID配置到启动参数,发消息时消息头传角色和消息ID (3)细化角色。 (4)Client发送功能ID,根据功能ID、Client_ID映射文件得到Client_ID,Client_ID配置到启动参数。 (5)连接失去时,更新角色和Session的Map。 test3.type1对应test3(1) test3.type2对应test3(2) 待做: Server不能通过控制台广播到每一个Client,ioSession.write(scanner.next());之后的代码行,会等下一次控制台输入,Enter按下后执行。 test4(2)(3)、test6、test7 已经转去Vert.x了