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的,因此这方面确定是可靠的,后面有心得还会继续在这记录。

相关文章
相关标签/搜索