Mina框架在项目中的使用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Mina框架在项目中的使用

最近由于项目本身的需要,正在进行Mina框架的学习,并且将其整合到正在开发的系统中。下面将会根据实际的工作情况分享一些心得感受。 一、?????项目需求: 我们正在开发的系统,现在主要分为两个部分,正两个部分之间需要使用TCP Socket进行网络通讯。具体开发的难点是发送消息的部分。由于需要考虑到每次创建连接时造成的系统开销,所以使用的连接方式必须是长连接,就是保存连接,不能断开。而且在连接的另一端发生当机的情况下能够及时回复,不会就此丢掉和这一端的通讯。在连接发送消息后,能够判定另一端无法及时收到消息的情况,并且做出正确处理。 综上所述,能够整理出如下三条需求: l??两端的连接通讯必须是长连接,不能每次重新建立。 l??在连接断开的情况下能够及时处理,并能有效恢复。 l??发送数据需要有超时机制。 我们这一阶段的Mina框架的使用便是围绕着这三条需求展开的。 二、?????????????Mina框架相关知识简介: 在正式开始Mina框架的实际应用前,先简单介绍一些Mina的基本知识,以便于下面的实用场景分析。中间会穿插架构图和示例代码。 在介绍架构之前先认识几个接口: IoAccepter?相当于网络应用程序中的服务器端 IoConnector?相当于客户端 IoSession?当前客户端到服务器端的一个连接实例 IoHandler?业务处理逻辑 IoFilter?过滤器用于悬接通讯层接口与业务层接口 然后可以看一下Mina的架构图,如图2-1Mina框架图所示。 在图中的模块链中,IoService便是应用程序的入口,相当于基本接口中的IoAccepter,IoAccepter便是IoService的一个扩展接口。IoService接口可以用来添加多个IoFilter,这些IoFilter符合责任链模式并由IoProcessor线程负责调用。而IoAccepter在ioService接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。在日常应用中,我们可以这样使用IoAccepter: IoAcceptor acceptor =?new?SocketAcceptor();相当于我们使用了?Socket?通讯方式作为服务的接入,当前版本的?Mina?还提供了除SocketAccepter外的基于数据报文通讯的DatagramAccepter以及基于管道通讯的VmPipeAccepter。另外还包括串口通讯接入方式,目前基于串口通讯的接入方式已经在最新测试版的MINA中提供。我们也可以自行实现IoService接口来使用自己的通讯方式。 而在上图中最右端也就是IoHandler,这便是业务处理模块。我们的项目大部分的工作也就是在这个接口的实现类中完成。在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。编写Handler类就是使用Mina开发网络应用程序的重心所在,相当于Mina已经帮你处理了所有的通讯方面的细节问题。为了简化Handler类,MINA提供了IoHandlerAdapter类,此类仅仅是实现了IoHandler接口,但并不做任何处理。 一个IoHandler接口中具有如下一些方法(摘自Mina的API文档): void?exceptionCaught(IoSession?session, Throwable?cause)? ? ? ? ? ? ? ? ? ? ?当接口中其他方法抛出异常未被捕获时触发此方法void?messageReceived(IoSession?session, Object?message)? ? ? ? ? ? ? ? ? ? ?当接收到客户端的请求信息后触发此方法.void?messageSent(IoSession?session, Object?message)? ? ? ? ? ? ? ? ? ? ?当信息已经传送给客户端后触发此方法.void?sessionClosed(IoSession?session)? ? ? ? ? ? ? ? ? ? ?当连接被关闭时触发,例如客户端程序意外退出等等.void?sessionCreated(IoSession?session)? ? ? ? ? ? ? ? ? ? ?当一个新客户端连接后触发此方法.void?sessionIdle(IoSession?session, IdleStatus?status)? ? ? ? ? ? ? ? ? ? ?当连接空闲时触发此方法.void?sessionOpened(IoSession?session)? ? ? ? ? ? ? ? ? ? ?当连接后打开时触发此方法,一般此方法与?sessionCreated?会被同时触发前面我们

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档