Playframework

What is Playframework

Playframework是一個基於JVM進行Java和Scala的WEB開發的全棧式開發框架,裏面集成了許多開發模式的最佳實踐,以及當下流行的開發技術。程序員

對高可擴展性的應用,Play提供了可控的最小化的資源消耗(CPU, memory, threads)web

Why is Playframework

如下是我對框架優點的總結數據庫

 

  • 對程序員更加友好
    1. 開發流程的改變:不須要從新編譯再啓動服務。取而代之的,只須要更改代碼後刷新頁面,框架會自動作這些事情
    2. 強大的命令行,新建工程、編譯、運行、測試、打包、發佈等經常使用功能都有對應的命令來執行。
    3. 以上兩點也意味着,框架裝好後,只須要一個編輯器就能夠開工了。(對於eclipse等IDE框架支持但不是必須)

 

  • 性能
    1. play內在就是一個異步的框架,它會異步的非阻塞的處理全部請求(NIO基於netty、異步模型創建於akka之上)。無阻塞和異步解決了併發數目的瓶頸,最大化發揮系統的能力,也能夠更好的計劃後續的擴展。
    2. 不管是選用Java仍是Scala,都運行於JVM之上,可靠且穩定

 

How to use

  • 安裝
    • 下載 :http://downloads.typesafe.com/play/2.2.3/play-2.2.3.zip
    • 安裝:解壓後 將play加入環境變量
  • first app
    1. 命令行模式下輸入 play new youappname, 而後再選擇一下語言,工程就建立好了
    2. 切換目錄到你的工程所在,輸入play,會彈出play的交互式命令行,輸入run啓動工程,run [port]指定端口,默認是9000.啓動後在瀏覽器中輸入localhost:9000,能夠看到歡迎頁面
    3. 若是你用的eclipse,在命令行執行:eclipse,建立工程文件
    4. 打開工程,咱們來瀏覽一下工程的結構
      • app/:包含應用的核心代碼,內部拆分爲models、controllers、views三個目錄,這裏是放置源碼的地方
      • conf/: 包含應用全部的配置文件,特別是主配置文件application.conf、路由定義文件、和國際化文件
      • project/: 包含構建腳本,構建系統基於sbt
      • public/ :包含全部公開資源,包括js,樣式和圖片的目錄。
      • test/ :包含測試代碼
    5. 添加本身的請求和action:
      • 在conf下的route 添加對應路由,配置到本身的action
      • 實現這個action

Why play is highly-scalable

Play從上到下都是異步的,使用iteratees異步的處理流。由於play的核心從不阻塞,相對於傳統的web框架線程池被調整的很小。 所以,若是你打算寫一些阻塞IO的代碼,或是CPU密集型的處理代碼,你須要知道是哪一個線程池在承受運行壓力,而後相應的調整它。作阻塞IO的時候不去考慮這些極可能致使Play框架的性能很是低下。例如:每秒只能處理不多的請求,CPU卻只用了5%。對應的,若是調整得當,在普通硬件(好比MACPRO)條件下的測試代表Play能夠絕不費力的每秒鐘處理成百上千次請求。瀏覽器

注意:如下類型的IO是徹底不會阻塞的 (意味着沒有任何線程在阻塞等待)併發

 

  1. The Play WS API:Play內置的webservice調用lib
  2. 異步的數據庫驅動如ReactiveMongo
  3. 從Akka的actor中發送、收取消息

 

  • Play 的線程池

Play使用不一樣的線程池實現不一樣的目的:app

 

  1. Netty boss/worker thread pools - 這些線程是Netty用來處理Netty IO的,應用代碼不可使用此線程池中的線程執行代碼。
  2. Play Internal Thread Pool - 這是Play內部的線程池,線程數量默認與可用處理器數量相同,可在application.conf中配置這個數量。同上,不要用它。
  3. Play default thread pool - 這是全部應用代碼執行時默認使用的線程池,它是Akka調度的,能夠經過配置Akka的方式來配置它。默認每一個處理器一個線程。
  4. Akka thread pool - 這是Play的Akka插件使用的,能夠經過配置Akka的方式配置它。

 

針對不一樣的需求的常見配置以下:框架

 

  • 純異步的
    • 意味着每一個操做都沒有阻塞的情形發生,使用默認的配置就能夠了
  • 高同步的
    • 若是你的大部分action都是阻塞IO(好比讀數據庫),這種狀況下,Play與傳統的web框架差很少,須要大量的線程處理阻塞,因此得把默認使用的線程池調大
  • 指定多個線程池
    • 同上,大部分action都是阻塞的,但你想要控制同一時刻系統執行哪部分action多一些,哪部分action少一些,你能夠配置多個線程池,並制定他們的權重。
相關文章
相關標籤/搜索