Spray框架学习

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


转载于:https://my.oschina.net/u/1452001/blog/317602

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值