码迷,mamicode.com
首页 > Web开发 > 详细

Spark Netty与Jetty (源码阅读十一)

时间:2016-12-09 08:10:08      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:ges   框架   cli   handler   lte   service   工厂   生成   禁用   

  spark呢,对Netty API又做了一层封装,那么Netty是什么呢~是个鬼。它基于NIO的服务端客户端框架,具体不再说了,下面开始。

  创建了一个线程工厂,生成的线程都给定一个前缀名。

  技术分享

  像一般的netty框架一样,创建Netty的EventLoopGroup:

  技术分享

  在常用的netty框架中呢,会创建客户端辅助类,设置SocketChannel:

  Bootstrap b = new Bootstrap();
  b.group(group).channel(NioSocketChannel.class)

  spark中呢 根据参数IOMode,返回正确的客户端SocketChannel:

  技术分享  返回正确的服务端socketChannel:

  技术分享

  返回远端的Channel地址:

  技术分享

  创建一个ByteBuf对本地线程缓存禁用的分配器。ByteBuf是由事件循环线程分配,所以线程本地缓存对于TransportClient是禁用的,ByteBuf释放是由Executor线程,不是事件循环线程完成。本地线程缓存经常会延迟ByteBuf的回收,导致巨大的内存消耗。

  

技术分享

  Spark这个禽兽,对Jetty也进行了封装,什么是Jetty呢,它是以java作为开发语言的servlet容器,它的API以一组jar包的形式发布,提供网络和web服务.在我理解,Netty是用socket~Jetty呢 就是Http~那么下来,我们看一下JettyUtils:

  技术分享

  createServlet,生成HttpServlet匿名内部类,此Responder类型发生隐式转换,转换为用户传入的函数参数。

  要为Jetty创建servlet,就涉及ServletContextHandler的API的使用,生成ServletContextHandler:

  技术分享

  创建给定路径为前缀的请求的响应处理,将SparkUI中的全部handler加入ContextHandlerCollection.,如果使用配置spark.ui.filters指定了filter,则给所有handler添加filter.然后调用startServiceOnPort,最终回调函数connect:

  技术分享

Spark Netty与Jetty (源码阅读十一)

标签:ges   框架   cli   handler   lte   service   工厂   生成   禁用   

原文地址:http://www.cnblogs.com/yangsy0915/p/6147826.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!