美文网首页
初步理解 Rack Application

初步理解 Rack Application

作者: z_k | 来源:发表于2017-03-22 15:31 被阅读0次

Rack 是 web 服务器和应用程序接口的抽象。一个最基本的 Rack Application 是一个能够响应 call 方法的对象。该方法返回一个数组 [status, {header}, [body]] 。例如,像下面这样就可以创建一个最简单的 Rack 应用程序。

Rack::Server.start(
  :app => lambda do |e|
    [200, {'Content-Type' => 'text/html'}, ['hello world']]
  end
)

Rack::Server 内部的构造主要由两个类 Rack::Builder Rack::Handler 实现。
Rack::Builder 负责构造 APP ,所谓的 APP 即是任何能够响应 call 方法,并返回 [status, {header}, [body]] 数组的对象。在 Rails 里这个 APP 就是我们自己的 Rails::Application 实例。Rack::Builder 通过 to_app 方法将作为参数传递进来的 app 包装,即穿过所有中间件,然后把 app 传递给 Rack::Server 的 app,最终传递给 server 。
同时,这个类还负责路由和中间件的管理和执行。中间件可以通过 use 方法添加。中间件实际上是一个能响应 call(env) 方法的类,其构造函数接收一个 app 对象作为参数,实际上它的作用相当于在请求的过程中,不断包装 app ,不断往 call 方法里添加内容,它构成了一连串的 call 调用。路由可以通过 map 添加,保存在 @map 里,它是请求路径与 rack app 的对应。

Rack::Builder.app do
  map '/' do
    run Heartbeat
  end
end

不知道 Rails S 的路由机制与这个有没有什么关系,Rails 的路由在什么地方加载的?

Rack::Handler 负责选择服务器和启动服务器。以 puma 为例,它提供了一个 run 方法用来启动服务器,该方法以 app 对象为参数。app 对象的 call(env) 方法应该就是由服务器内部调用的,env 参数也来自服务器。

总的来说,Rack::Server 负责了服务器选择和管理,如启动和关闭;中间件和路由的管理、执行。它在 webserver 和应用程序之间建立了标准接口,定义了 app 的统一模式。对于 rails 来说,可能路由和中间件在此基础上又做了一层包装,有待进一步学习验证。

相关文章

  • 初步理解 Rack Application

    Rack 是 web 服务器和应用程序接口的抽象。一个最基本的 Rack Application 是一个能够响应 ...

  • Java application初步认识

    1、Java的源文件以.java为扩展名,通过javac编译过后形成.class文件;.class文件则是java...

  • 4. Working with Controllers - 4.

    4.1 Rack Rack is a modular interface for handling web req...

  • rack学习1

    rack是ruby服务器和rack应用程序之间的一个框架,rails,sinatra都是基于rack构建的,都属于...

  • rack

    rack 一个可以相应call方法的ruby对象。 env => rack => [code, header, b...

  • Ruby进阶之Rack深入

    之前讲述了基础的Rack使用,现在我们来试试深入Rack,如果不了解Rack,可以去看看之前一篇最基础的 Ruby...

  • Ruby进阶之Rack入门

    简介 基本上所有的 Ruby web framework 都是Rack App,web框架大多都是基于rack之上...

  • aqs初步理解

    1.介绍 AQS,AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的...

  • 初步理解Crontab

    1.含义 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入...

  • Redux初步理解

    Redux笔记 参考理解 Redux 中文文档Redux 阮一峰 严格的单向数据流是Rduex设计核心。 Redu...

网友评论

      本文标题:初步理解 Rack Application

      本文链接:https://www.haomeiwen.com/subject/zewnnttx.html