socket 和mina 的区别

通过优锐课核心java学习笔记中,我们可以看到socket 和mina 的区别,码了很多专业的相关知识, 分享给大家参考学习。

MINA,Grizzly[grizzly-nio-framework],xSocket都是基于 java nio的 server framework.
  这里的性能缺陷的焦点是指当一条channel上的SelectionKey.OP_READ ready时,1.是由select thread读完数据之后再分发给应用程序的handler,2.还是直接就分发,由handler thread来负责读数据和handle.
  mina,xsocket是1. grizzly-nio-framework是2.
  尽管读channel buffer中bytes是很快的,但是如果我们放大,当连接channel达到上万数量级,甚至更多,这种延迟响应的效果将会愈加明显.
  MINA:
  for all selectedKeys
  {
  read data then fireMessageReceived.
  }
  xSocket:
  for all selectedKeys
  {
  read data ,append it to readQueue then performOnData.
  }
  其中mina在fireMessageReceived时没有使用threadpool来分发,所以需要应用程序在handler.messageReceived中再分发.而xsocket的performOnData默认是分发给threadpool[WorkerPool],WorkerPool虽然解决了线程池中的线程不能充到最大的问题[跟tomcat6的做法一样],但是它的调度机制依然缺乏灵活性.
  Grizzly:
  for all selectedKeys
  {
  [NIOContext—filterChain.execute—>our filter.execute]<------run In DefaultThreadPool
  }
  grizzly的DefaultThreadPool几乎重写了java util concurrent threadpool,并使用自己的LinkedTransferQueue,但同样缺乏灵活的池中线程的调度机制.
  
  下面分别是MINA,xSocket,Grizzly的源码分析:
  Apache MINA (mina-2.0.0-M6源码为例):
  我们使用mina nio tcp最常用的样例如下:
  NioSocketAcceptor acceptor = new NioSocketAcceptor(/NioProcessorPool’s size/);
  DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
  
  //chain.addLast(“codec”, new ProtocolCodecFilter(
  //new TextLineCodecFactory()));
  …
  // Bind
  acceptor.setHandler(/our IoHandler/);
  acceptor.bind(new InetSocketAddress(port));
  ------------------------------------------------------------------------------------
  首先从NioSocketAcceptor(extends AbstractPollingIoAcceptor)开始,
  bind(SocketAddress)—>bindInternal—>startupAcceptor:启动AbstractPollingIoAcceptor.Acceptor.run使用executor[Executor]的线程,注册[interestOps:SelectionKey.OP_ACCEPT],然后wakeup selector.
  一旦有连接进来就构建NioSocketSession–对应–channal,然后session.getProcessor().add(session)将当前的channal加入到NioProcessor的selector中去[interestOps:SelectionKey.OP_R

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值