【问题标题】:Sinatra + websocket + CelluloidSinatra + websocket + 赛璐珞
【发布时间】:2012-12-02 21:53:00
【问题描述】:

您好,有人知道如何放置一个在 Celluloid:IO 上运行并使用 websocket 的 Sinatra 应用程序的快速代码示例吗?

我知道 Reel for Celluloid 的存在(“Reel 是一个快速、无阻塞的“事件”Web 服务器,构建在 Celluloid:IO 之上” ...并立即支持 websocket ) 但我还是想继续使用 Sinatra,因为我喜欢它,我已经习惯了它,我宁愿不重写很多代码......

希望你能帮忙。

【问题讨论】:

  • 如果您发布一些现有的代码,如果您查看下面我的要点并发布您现有的情况之一,我可能会帮助调整您的代码。
  • 我认为它必须更简单......目前我没有时间测试它..但我感谢你的全面回答,所以同时我要感谢你并为此投票给你。
  • 没问题。这实际上是一个泥潭,直到您使用我提出的方法。但它是众多风格中的一种。一旦你有时间测试它,我想你会对我展示的方法感到满意。如果没有,请发布您的。我已经厌倦了 Sinatra 和 Rack,但是我已经开始为该对进行轻松可交换的替换,然后通过支持您的所有 Sinatra 和 Rack 代码来改变我对您问题的回答,除了 Reaf::Scope。这应该是你需要改变的全部。 github.com/penultimatix/reaf

标签: concurrency websocket sinatra celluloid


【解决方案1】:

Celluloid::IO 有一个名为 Reel ( http://github.com/celluloid/reel ) 的事件 HTTP/WebSocket 服务器,这是您想要的最佳设置,但是,除了 Thin 和彩虹。这超出了 Sinatra 的范围,必须涉及 Rack 本身。到目前为止,它一直是特定于某些 HTTP 服务器的,并且每个“机架处理程序”都以自己的方式接近 WebSocket。现在它有点标准化了,但在 Rack 2.0 中它将成为永久性的。我猜这种临时的方式会保留下来,但在 2.0 中变得比现在在 +1.5.* 中更成熟。

这即将发布到 Reel 的 master 分支,但现在在 halgorium 的 fork 的一个分支中,这里:

https://github.com/halorgium/reel/tree/hijacked-websocket

这个问题的持续进展在这里:

https://github.com/celluloid/reel/issues/42

此功能的实现涉及与在 Sinatra 下的 Rack 中称为 hijack API 的全新且有点临时的功能进行交互。它相当复杂,但一旦你掌握了它,它就很酷了。完整的信息在这里:

...这一切都在 github 线程中决定: https://github.com/rack/rack/pull/481

根据@rhk 的说法,目前还没有通过 Rack 劫持 Sinatra 对 WebSockets 的正式支持,除了中间件之外没有任何计划。因此,您始终可以根据您的服务器和实施风格的选择,选择性地处理它。

我处理的方式是使用 Reel,但是 Puma (http://puma.io) 也很好。任何支持 hijack_io 的 HTTP 服务器都将运行相同的操作。我这样做的方式在下面链接的要点中进行了说明。它使用 websocket-protocol-ruby 来实际处理与客户端的交互,在客户端,我使用 portal.js 而不仅仅是普通的 HTML5 方法。我相信它会更好。

Portal.js: https://github.com/flowersinthesand/portal

websocket-protocol-ruby: https://github.com/faye/websocket-protocol-ruby

这一切都取决于这块,正如 github 上的 Rack API 线程中所述:

env['rack.hijack'].call
@env = env
@io = env['rack.hijack_io']

hijack_io 有两种使用方式,但正如我所说,它非常涉及 Rack。那里没有太多的 Sinatra 代码,因为它不是真正的 Sinatra 东西。同样,正如我所提到的,它甚至没有真正计划变得无缝。这将是一个 sinatra/contrib 的东西或其他一些中间件。所以这是我的方式,在我使用 hijack_io 的一个例子中,作为一个粗略的草图。

...要点: https://gist.github.com/digitalextremist/5441315

【讨论】:

    猜你喜欢
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2013-06-04
    • 1970-01-01
    • 2016-01-31
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多