spark呢,对Netty API又作了一层封装,那么Netty是什么呢~是个鬼。它基于NIO的服务端客户端框架,具体再也不说了,下面开始。java
建立了一个线程工厂,生成的线程都给定一个前缀名。web
像通常的netty框架同样,建立Netty的EventLoopGroup:缓存
在经常使用的netty框架中呢,会建立客户端辅助类,设置SocketChannel:网络
Bootstrap b = new Bootstrap(); b.group(group).channel(NioSocketChannel.class)
spark中呢 根据参数IOMode,返回正确的客户端SocketChannel:框架
返回正确的服务端socketChannel:socket
返回远端的Channel地址:函数
建立一个ByteBuf对本地线程缓存禁用的分配器。ByteBuf是由事件循环线程分配,因此线程本地缓存对于TransportClient是禁用的,ByteBuf释放是由Executor线程,不是事件循环线程完成。本地线程缓存常常会延迟ByteBuf的回收,致使巨大的内存消耗。oop
Spark这个禽兽,对Jetty也进行了封装,什么是Jetty呢,它是以java做为开发语言的servlet容器,它的API以一组jar包的形式发布,提供网络和web服务.在我理解,Netty是用socket~Jetty呢 就是Http~那么下来,咱们看一下JettyUtils:ui
createServlet,生成HttpServlet匿名内部类,此Responder类型发生隐式转换,转换为用户传入的函数参数。spa
要为Jetty建立servlet,就涉及ServletContextHandler的API的使用,生成ServletContextHandler:
建立给定路径为前缀的请求的响应处理,将SparkUI中的所有handler加入ContextHandlerCollection.,若是使用配置spark.ui.filters指定了filter,则给全部handler添加filter.而后调用startServiceOnPort,最终回调函数connect: