Spray框架學習

以前使用Scala Play! Framework做爲前端框架開發項目,使用netty做爲應用服務器,感受很是輕便、好用,尤爲是scala的語法簡單、直觀,雖然有些操做還要查看文檔才能實現,但仍然不想在迴歸到Java上面,即便Java8有了lambda,仍是感受語法太笨重。html

如今有個新的項目,是輕前端、重服務端的,開始就要考慮服務端接口要提供給移動應用客戶端和web前端,再考察了幾個框架後,決定採用Spray(spray.io)做爲服務器端實現,這樣能夠給不一樣的客戶端提供接口。Web前端打算使用AngularJS,移動端目前要支持Android。前端

Spray官方文檔中有一個Get Started的Demo,很簡單直接的一個例子,有兩個版本,一個是基於Jetty的Servlet版,另一個是基於Spray項目的HTTP Server spray-can的例子,我先從這個例子開始。
git

  1. 連接下載該項目源碼。github

  2. 因爲我習慣使用IDEA做爲Scala的IDE, 因此下載一個sbt-idea的sbt插件,用於生成idea項目。能夠從此連接下載,下載完成後按照該項目的安裝提示將plugin添加到sbt中,運行gen-idea生成idea工程web

  3. 按照Spray template的guide,安裝運行該項目。固然,前提是安裝sbt,而後運行sbt,它會自動下載相應的全部dependency。json

  4. 服務器啓動後,直接訪問8080端口,便可看到默認頁面。瀏覽器

默認例子是使用html做爲response,我添加了一段代碼讓其增長對指定路徑響應JSON,在MyService的myRoute變量中加入一段:前端框架

val myRoute =
    path("") {
      get {
        respondWithMediaType(`text/html`) { // XML is marshalled to `text/xml` by default, so we simply override here
          complete {
            <html>
              <body>
                <h1>Say hello to <i>spray-routing</i> on <i>spray-can</i>!</h1>
              </body>
            </html>
          }
        }
      }
    }~
    path("ping"){
      get{
        respondWithMediaType(`application/json`){
          complete{
            jsonPrefix + "{result: 'PONG'}"
          }
        }
      }
    }

從新編譯重啓,而後輸入http://localhost:8080/ping,瀏覽器上就能夠看到JSON字符串了。在這個簡單的過程發現兩個問題:服務器

  1. Spray的調試不是hotswap的,必需要手動重啓服務器,這點沒有playframework方便。架構

  2. 在設置JSON的response類型的時候,出現一個很尷尬的狀況,多是我眼神很差,把那個application/json外面的當成了單引號,而後怎麼都不對,一直報編譯錯誤。後來仔細看了一下他原來的代碼,原來外面的不是單引號,而是~這個不按shift時候的值,就是鍵盤左上角的那個鍵,汗~~

Spray做爲一個簡單的REST服務端框架,已經通過不少高併發項目的驗證,性能和可靠性都沒問題。由於它是基於高併發架構akka的,因此這方面確定是可靠的,後面有心得還會繼續在這記錄。

相關文章
相關標籤/搜索