Spray 介绍

Spray.io官网的介绍,在本身作的辅助翻译工具(http://mists.cloudfoundry.com/translate_v0.2/)上翻译的,比用记事本方便不少。跟之前同样,不少句子看不懂,有些按照本身的理解翻译了,有些则驴唇不对马嘴。
介绍

什么是Spray

spray是一套基于Akka的,提供客户端和服务端REST/HTTP和底层网络IO的轻量级Scala库。 git

我 们相信,选择Scala(可能还有Akka)做为构建软件的首选工具,你会想要不只在你的应用程序层依靠它们的力量,更包括整个(jvm级别)网络堆栈。 spray正是提供这些:一个知足REST/HTTP和网络IO需求的集成组件集,让你在堆栈级别用符合Scala(以及Akka)语言习惯的API,所 有的实现没有任何遗留Java库的封装。 github

原则

spray的发展是遵循如下原则: web

彻底异步的,非阻塞全部的api是彻底异步的,在全部可能的地方避免阻塞式代码。基于Actor和Futurespray彻底拥抱它的构建平台的编程模型,Akka Actor和Future它的API的关键构造。高性能尤为spray的低级组件是为在高负载环境下提供卓越性能而精心设计的。轻量级全部依赖都很是当心地管理,spray代码库自己尽量保持瘦。模块化被划分为一组集成但松耦合的组件,应用程序只须要依赖实际使用的部分。可测试全部spray组件是结构化的,容许容易和方便的测试。

模块

目前spray套件由这些模块组成: 数据库

spray-caching 基于concurrentlinkedhashmap和Akka Future构建的快速、轻量级内存中缓存。
spray-can
基于spray-io的低级别,低开销,高性能的HTTP服务端和客户端。
spray-client
提供更高级别接口的HTTP服务端,基于spray-can的HttpClient。
spray-http
HTTP请求,响应和公共信息头的不可变模型。这个模块是彻底独立的,它既不依赖于Akka也不依赖于spray的任何部分。
spray-httpx
用于处理HTTP消息的高级工具(主要为封装,解封装,(解)压缩),它被用于spray-client和spray-routing。
spray-io一个低级别网络IO层,用于直接链接Akka actor到异步Java NIO socket。它采用了一个预约义的可重用的管线式架构(如链接超时和SSL / TLS支持)。咱们更喜欢把它当作Scala版的Netty。
spray-servlet
一个适配器层,在Servlet API之上提供spray-can HttpServer接口(的一个子集)。容许在servlet容器中使用spray-routing。
spray-routing
高级路由DSL,用于定义优雅的RESTful web服务。
spray-testkit
一个用于简化测试spray-routing服务的DSL。支持ScalaTest和Specs2。
spray-util
用于除spray-http以外全部模块的小工具模块。
spray-json一个轻量,简洁的JSON实现(Scala)。因为它不依赖于spray的其余部分和Akka,而且它是spray-client和spray-httpx的可选依赖,所以它不在spray的主仓库,而在它本身的github仓库。 编程

理念

自2011年初spray发展推进清晰专一于提供工具,来构建集成层而不是应用程序核心。所以它将本身视为一套件,而不是一个框架。 json

我 们认为,一个框架(framework)给你一个架子(frame),你在里面构建你的应用程序。它已经预制了不少的决策并提供了一个基础支撑结构,让你 快速开始和交付结果。在某种程度上一个框架就像一个骨架,你把应用程序的肉放进去从而让它活跃起来。所以在你开始开发应用程序以前选择框架,而且尽可能使框 架的工做方式与你一同前进,它们才能工做得最好。 后端

例 如,若是你要构建一个面向浏览器的web应用,选择一个web框架并在它之上构建你的应用程序是有意义的,由于应用的核心是浏览器与服务端代码的交互。框 架制造商选择了一个行之有效的方法来设计这样的应用程序,并让用或多或少具有灵活性的应用模板来作填空。可以依靠这样的最佳实践体系结构,能够成为一个很 好的资源,来迅速把事情搞定。 api

然 而,若是你的应用程序不是一个web应用程序,它的核心不是浏览器交互而是有些特殊,也许是复杂的商业服务,并且你仅仅想尝试经过REST/HTTP接口 链接到世界各地,web框架可能不是你须要的。在这种状况下,应用程序架构应由核心决定,而不是界面层。当你,你可能没法受益于现有的浏览器特定框架组 件,像视图模板,资源管理,Javascript和CSS生成/操做/精简,定位支持,AJAX支持,等等。 浏览器

spray明确设计成不是框架,并不是由于咱们不喜欢框架,而是对于使用案例框架不是正确的选择。spray有助于构建基于HTTP的交互层。所以你一般不须要在spray之上构建你的应用,而是在别的什么上构建你的程序,仅仅在须要HTTP交互的地方使用spray。 缓存

spray对于Web开发

尽 管spray发展到目前为止尚未关注web应用,但基于HTTP的交互层,你固然也能够用它来构建基于浏览器的强大的GUI。最近的趋势是web应用逻 辑愈来愈远离服务端,并进入(基于JS的)浏览器客户端,并且愈来愈多实用的sbt插件(提供spray自身没有的功能)(像视图模板,LESS和 CoffeeScript支持)甚至可能使这种方法得到的吸引力。

目前一个基于spray的web开发堆栈可能包括这些组件(子集):

spray-can HttpServerweb服务端。接收HTTP请求并发送响应。可选的SSL。
spray-routing
路由层。根据URI,参数,内容等处理请求。推进高层次的工做请求到深层应用级别,并转换各自的结果到HTTP响应。提供静态内容。
sbt-revolver SBT插件,对任何类型源码(scala,twirl,CSS,LESS,JavaScript,CoffeeScript,图片等)的更改进行热加载,而不须要重启服务器。能够提供一个差很少动态语言类型的开发体验。
twirl SBT插件,基于play 2.0模板引擎的视图模板。
less-sbt
SBT插件,将LESS源码编译为CSS。
coffeescripted-sbt SBT插件,编译CoffeeScript源码为JavaScript。
sbt-js SBT插件,用于Javascript和CoffeeScript的编译,缩小和模板。
SLICK 优雅的数据库查询和访问库。
spray-json
简洁,符合语言习惯的JSON读写库。
sbt-assembly SBT插件,部署单个jar文件。 A client-side frontend framework现有的客户端JavaScript框架中的一个。

虽 然这样一堆可能没法提供全部彻底成熟的web框架来知足你特定应用的须要。可是因为你能够为每一个独特的工做选择最好的工具,结果应用程序堆栈更灵活,并且 别任何单一的框架更不容易过期。固然,这种方式的缺点是,整合不一样组件的工做如今落到了你的肩上。而且没有单点提供支持和升级。

不过,结合客户端JavaScript框架与基于spray的后端应用能够证实它自己就是传统的,服务端web框架的有趣替代。咱们但愿在这里听到你的经验。

This Site

一个运行于spray堆栈的简单网站的例子是当前站点(http://spray.io)。这是咱们为spray.io所使用的堆栈:

更多细节请检出这个站点的路由定义:https://github.com/spray/spray/blob/master/site/src/main/scala/spray/site/SiteServiceActor.scala。

相关文章
相关标签/搜索