Playframework

What is Playframework

Playframework是一个基于JVM进行Java和Scala的WEB开发的全栈式开发框架,里面集成了许多开发模式的最佳实践,以及当下流行的开发技术。程序员

对高可扩展性的应用,Play提供了可控的最小化的资源消耗(CPU, memory, threads)web

Why is Playframework

如下是我对框架优点的总结数据库

 

  • 对程序员更加友好
    1. 开发流程的改变:不须要从新编译再启动服务。取而代之的,只须要更改代码后刷新页面,框架会自动作这些事情
    2. 强大的命令行,新建工程、编译、运行、测试、打包、发布等经常使用功能都有对应的命令来执行。
    3. 以上两点也意味着,框架装好后,只须要一个编辑器就能够开工了。(对于eclipse等IDE框架支持但不是必须)

 

  • 性能
    1. play内在就是一个异步的框架,它会异步的非阻塞的处理全部请求(NIO基于netty、异步模型创建于akka之上)。无阻塞和异步解决了并发数目的瓶颈,最大化发挥系统的能力,也能够更好的计划后续的扩展。
    2. 不管是选用Java仍是Scala,都运行于JVM之上,可靠且稳定

 

How to use

  • 安装
    • 下载 :http://downloads.typesafe.com/play/2.2.3/play-2.2.3.zip
    • 安装:解压后 将play加入环境变量
  • first app
    1. 命令行模式下输入 play new youappname, 而后再选择一下语言,工程就建立好了
    2. 切换目录到你的工程所在,输入play,会弹出play的交互式命令行,输入run启动工程,run [port]指定端口,默认是9000.启动后在浏览器中输入localhost:9000,能够看到欢迎页面
    3. 若是你用的eclipse,在命令行执行:eclipse,建立工程文件
    4. 打开工程,咱们来浏览一下工程的结构
      • app/:包含应用的核心代码,内部拆分为models、controllers、views三个目录,这里是放置源码的地方
      • conf/: 包含应用全部的配置文件,特别是主配置文件application.conf、路由定义文件、和国际化文件
      • project/: 包含构建脚本,构建系统基于sbt
      • public/ :包含全部公开资源,包括js,样式和图片的目录。
      • test/ :包含测试代码
    5. 添加本身的请求和action:
      • 在conf下的route 添加对应路由,配置到本身的action
      • 实现这个action

Why play is highly-scalable

Play从上到下都是异步的,使用iteratees异步的处理流。由于play的核心从不阻塞,相对于传统的web框架线程池被调整的很小。 所以,若是你打算写一些阻塞IO的代码,或是CPU密集型的处理代码,你须要知道是哪一个线程池在承受运行压力,而后相应的调整它。作阻塞IO的时候不去考虑这些极可能致使Play框架的性能很是低下。例如:每秒只能处理不多的请求,CPU却只用了5%。对应的,若是调整得当,在普通硬件(好比MACPRO)条件下的测试代表Play能够绝不费力的每秒钟处理成百上千次请求。浏览器

注意:如下类型的IO是彻底不会阻塞的 (意味着没有任何线程在阻塞等待)并发

 

  1. The Play WS API:Play内置的webservice调用lib
  2. 异步的数据库驱动如ReactiveMongo
  3. 从Akka的actor中发送、收取消息

 

  • Play 的线程池

Play使用不一样的线程池实现不一样的目的:app

 

  1. Netty boss/worker thread pools - 这些线程是Netty用来处理Netty IO的,应用代码不可使用此线程池中的线程执行代码。
  2. Play Internal Thread Pool - 这是Play内部的线程池,线程数量默认与可用处理器数量相同,可在application.conf中配置这个数量。同上,不要用它。
  3. Play default thread pool - 这是全部应用代码执行时默认使用的线程池,它是Akka调度的,能够经过配置Akka的方式来配置它。默认每一个处理器一个线程。
  4. Akka thread pool - 这是Play的Akka插件使用的,能够经过配置Akka的方式配置它。

 

针对不一样的需求的常见配置以下:框架

 

  • 纯异步的
    • 意味着每一个操做都没有阻塞的情形发生,使用默认的配置就能够了
  • 高同步的
    • 若是你的大部分action都是阻塞IO(好比读数据库),这种状况下,Play与传统的web框架差很少,须要大量的线程处理阻塞,因此得把默认使用的线程池调大
  • 指定多个线程池
    • 同上,大部分action都是阻塞的,但你想要控制同一时刻系统执行哪部分action多一些,哪部分action少一些,你能够配置多个线程池,并制定他们的权重。
相关文章
相关标签/搜索