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: