Spark Netty與Jetty (源碼閱讀十一)


  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:

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM