Spray框架学习

原创
2014/09/23 17:34
阅读数 886

之前使用Scala Play! Framework作为前端框架开发项目,使用netty作为应用服务器,感觉非常轻便、好用,尤其是scala的语法简单、直观,虽然有些操作还要查看文档才能实现,但仍然不想在回归到Java上面,即使Java8有了lambda,还是感觉语法太笨重。

现在有个新的项目,是轻前端、重服务端的,开始就要考虑服务端接口要提供给移动应用客户端和web前端,再考察了几个框架后,决定采用Spray(spray.io)作为服务器端实现,这样可以给不同的客户端提供接口。Web前端打算使用AngularJS,移动端目前要支持Android。

Spray官方文档中有一个Get Started的Demo,很简单直接的一个例子,有两个版本,一个是基于Jetty的Servlet版,另外一个是基于Spray项目的HTTP Server spray-can的例子,我先从这个例子开始。

  1. 链接下载该项目源码。

  2. 由于我习惯使用IDEA作为Scala的IDE, 所以下载一个sbt-idea的sbt插件,用于生成idea项目。可以从此链接下载,下载完成后按照该项目的安装提示将plugin添加到sbt中,运行gen-idea生成idea工程

  3. 按照Spray template的guide,安装运行该项目。当然,前提是安装sbt,然后运行sbt,它会自动下载相应的所有dependency。

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


展开阅读全文
打赏
0
1 收藏
分享
加载中
你下载的这个demo里应该依赖了Revolver插件.
在sbt里~re-start启动就可以实现自动更新
2015/01/04 13:49
回复
举报
更多评论
打赏
1 评论
1 收藏
0
分享
在线直播报名
返回顶部
顶部