Concurrency 西纳特拉+;websocket+;赛璐珞

Concurrency 西纳特拉+;websocket+;赛璐珞,concurrency,websocket,sinatra,celluloid,Concurrency,Websocket,Sinatra,Celluloid,大家好,有人知道如何在websocket上运行并使用它的Sinatra应用程序的快速代码示例吗 我知道Reel for Celloid的存在(“Reel是一个建立在赛璐珞:IO之上的快速、无阻塞的‘事件’web服务器”…并直接支持WebSocket),但尽管如此,我还是想继续使用Sinatra,因为我喜欢它,我已经习惯了它,我不想重写很多代码 希望您能提供帮助。赛璐珞::IO有一个名为Reel()的事件HTTP/WebSocket服务器,它是您所需的最佳设置,但是,除了薄彩虹之外,它还是非常新的

大家好,有人知道如何在websocket上运行并使用它的Sinatra应用程序的快速代码示例吗

我知道Reel for Celloid的存在(“Reel是一个建立在赛璐珞:IO之上的快速、无阻塞的‘事件’web服务器”…并直接支持WebSocket),但尽管如此,我还是想继续使用Sinatra,因为我喜欢它,我已经习惯了它,我不想重写很多代码


希望您能提供帮助。

赛璐珞::IO有一个名为Reel()的事件HTTP/WebSocket服务器,它是您所需的最佳设置,但是,除了薄彩虹之外,它还是非常新的。这超出了Sinatra的范围,必须涉及机架本身。到目前为止,它是特定于某些HTTP服务器的,每个“机架处理程序”都以自己的方式处理WebSocket。现在它有点标准化了,但在Rack 2.0中它将成为永久性的。我想这种暂时的方式将继续存在,但在2.0中比在+1.5中更加成熟。*现在

这将被释放到卷轴的主分支中,但现在在halgorium叉子的分支中,这里:

这一问题正在取得的进展如下:

此功能的实现涉及到与Sinatra下面Rack中名为劫持的非常新且有些临时的功能进行交互。它相当复杂,但一旦你掌握了窍门,它就相当酷了。有关这方面的完整信息,请参见:

…这一切都是在github线程中决定的:

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

我处理它的方法是使用Reel,但是Puma()也很好。任何具有劫持io功能的HTTP服务器都将执行相同的操作。下面链接的要点说明了我的做法。它使用websocket协议ruby来实际处理与客户端的交互,在客户端,我使用portal.js而不仅仅是简单的HTML5方法。我相信会好得多

Portal.js:

websocket协议ruby:

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

env['rack.hijack'].call
@env = env
@io = env['rack.hijack_io']
有两种方法可以使用hijack_io,但正如我所说的,它非常复杂。没有太多的Sinatra代码,因为它不是Sinatra的东西。再次,正如我提到的,它甚至没有真正计划成为无缝的。它将是sinatra/contrib或其他中间件。这是我的方法,在一个例子中,我使用了劫持io,作为一个粗略的草图

…要点:


如果你发布一些你现有的代码,我可能会帮助你调整代码,如果你看看我下面的要点,然后发布一个你现有的情况。我认为它必须更简单。。。现在我没有时间去测试它。。但我很感激你的全面回答,所以在此同时我要感谢你并为此投票。没问题。事实上,这是一个泥潭,除非你使用我所说的方法。但这是许多款式中的一种。一旦你有时间测试它,我想你会对我展示的方法感到满意。如果没有,请张贴您的。然而,我已经厌倦了Sinatra和Rack,于是我开始制作一个易于更换的替代品,它将通过支持所有Sinatra和Rack代码来改变我对你问题的回答,除了