Spray.io官网的介绍,在本身作的辅助翻译工具(http://mists.cloudfoundry.com/translate_v0.2/)上翻译的,比用记事本方便不少。跟之前同样,不少句子看不懂,有些按照本身的理解翻译了,有些则驴唇不对马嘴。介绍
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应用,但基于HTTP的交互层,你固然也能够用它来构建基于浏览器的强大的GUI。最近的趋势是web应用逻 辑愈来愈远离服务端,并进入(基于JS的)浏览器客户端,并且愈来愈多实用的sbt插件(提供spray自身没有的功能)(像视图模板,LESS和 CoffeeScript支持)甚至可能使这种方法得到的吸引力。
目前一个基于spray的web开发堆栈可能包括这些组件(子集):
spray-can HttpServerweb服务端。接收HTTP请求并发送响应。可选的SSL。虽 然这样一堆可能没法提供全部彻底成熟的web框架来知足你特定应用的须要。可是因为你能够为每一个独特的工做选择最好的工具,结果应用程序堆栈更灵活,并且 别任何单一的框架更不容易过期。固然,这种方式的缺点是,整合不一样组件的工做如今落到了你的肩上。而且没有单点提供支持和升级。
不过,结合客户端JavaScript框架与基于spray的后端应用能够证实它自己就是传统的,服务端web框架的有趣替代。咱们但愿在这里听到你的经验。
一个运行于spray堆栈的简单网站的例子是当前站点(http://spray.io)。这是咱们为spray.io所使用的堆栈:
更多细节请检出这个站点的路由定义:https://github.com/spray/spray/blob/master/site/src/main/scala/spray/site/SiteServiceActor.scala。