Rails框架中的http协议位于何处?

时间:2019-05-11 17:00:00

标签: ruby-on-rails http network-protocols quic

我只是想知道 HTTP 框架在哪里,以及如何使用不同的网络层为客户端-服务器通信实现不同的协议?

  

有一个名为 QUIC 的新协议,它具有低延迟,并且   有人想在Rails应用程序中实现它,有人怎么做?   我几乎找不到与实施相关的任何资源   互联网。

2 个答案:

答案 0 :(得分:3)

猜测,这将由位于Web服务器和您的Rails代码之间的Rack middleware处理。您的Rails应用程序不会与Web服务器交互,而是与与您的Web服务器交互的Rack交互。

Rails <---> Rack <---> Web Server <---> Web Client

Here is a tiny Rack server that says "Hello, world!"

require "rack"
require "thin"

class HelloWorld
  def call(env)
    [ 200, { "Content-Type" => "text/plain" }, ["Hello World"] ]
  end
end

Rack::Handler::Thin.run HelloWorld.new

Rack::Handler::Thin与小型thin Web服务器进行对话,并向其传递由HTTP代码,HTTP标头和响应主体组成的响应。

您可能很幸运。 LiteSpeed web server支持QUIC和Rack has a LiteSpeed handler。可能就行了。

答案 1 :(得分:2)

正如评论中所述,QUIC尚未正式标准化,因此不足为奇的是,大多数工具中均不提供此功能。没有一个主要的Web服务器(例如Apache,Nginx或IIS),甚至没有表明它们正在使用它。它将于7月完成,然后提交标准化,此过程将在几个月后进行。在那之后,我希望实现开始可用。

Google发明了QUIC,并在其服务器和Chrome中拥有一个版本。这形成了将要标准化的QUIC的基础,但是两者却存在分歧并且不兼容。因此,如果您愿意的话,可以实现Google QUIC的版本,而某些服务器(例如LiteSpeed和某些CDN(例如Akamai)可以做到这一点。 Google自己的Cloud Platform也是如此。他们基本上是通过对开源Google Chrome浏览器代码进行反向工程来实现的。此外,当Google迭代QUIC并停止支持旧版本时,他们必须继续使用该版本,否则它将停止工作。最终,一旦IETF标准化QUIC出现,Google QUIC将被弃用,然后退役。

QUIC也非常复杂!实现它并非易事,将花费大量的精力和时间。它并不像查找HTTP代码并复制和粘贴并更改几件事那样简单。这是一个庞大的全新协议,可重新实现TCP,TLS和HTTP / 2的某些部分。那么HTTP / 3就是HTTP / 2遗留下来的内容,需要实现它以及QUIC才能有用。

最后,QUIC的影响可能没有您想像的那么大。 QUIC是HTTP / 2的改进,它修复了一个极端的情况,即如果丢包率很高,HTTP / 2可能比HTTP / 1.1慢。除了这种情况之外,QUIC的初始版本将与现在可用的HTTP / 2和TLSv1.3非常相似。 QUIC的主要原因之一是允许它快速发展,因为TCP几乎是不可能更改的。Future versions of QUIC可能包括前向纠错(自动重新创建丢弃的数据包),连接迁移(到允许您无缝地从WiFi切换到移动),并且除了HTTP以外,还可以使用它们,但它们超出了QUIC working group charter定义的初始版本的范围,因为即使没有QUIC也很复杂。另外,TCP已针对QUIC will likely be more CPU expensive and slow, especially initially and there may be other issues to solve as well进行了操作系统和网络堆栈的高度优化。

总而言之,如果您现在想要QUIC,请查看其中一个Web服务器或CDN或Google Cloud Platform,然后将其放在应用程序服务器的前面。 Like HTTP/2 this usually gives the main benefits,这意味着您无需担心上述所有复杂情况。但是对我来说,QUIC是一个值得关注的未来,并不是我现在想参加的事情。

如果有兴趣了解有关HTTP / 2,HTTP / 3和QUIC以及某些复杂性的更多信息,那么您可以阅读我关于此主题的书:https://www.manning.com/books/http2-in-action