微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

并发 – Sinatra websocket赛璐id

您有没有人知道如何在 Celluloid:IO之上运行的Sinatra应用程序的快速代码示例,并使用websocket?

我知道Celloloid的卷轴的存在(“卷轴是一个快速,非阻塞”事件的Web服务器,构建在Celluloid之上:IO“…并直接支持websockets),但是我仍然希望继续使用Sinatra因为我喜欢它,我已经习惯了,我宁愿不重写很多代码

希望你能帮忙.

解决方法

Celluloid :: IO有一个事件的HTTP / WebSocket服务器,名为Reel( http://github.com/celluloid/reel),它是您想要的最佳设置,但是除了Thin和Rainbow之外,它还是非常新的.这超越了Sinatra,并且必须涉及Rack本身.到目前为止,它已经针对某些HTTP服务器,每个“Rack Handler”都以自己的方式接近了WebSockets.现在它有些标准化,但是在Rack 2.0中它将变得永久.我猜这个暂时的方式将会保持下去,但在2.0中比现在更加成熟.

这个即将被释放到卷轴的主分支,但是现在是在一个halgorium的叉子的分支,在这里

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

这个问题正在进行中:

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

功能的实现涉及与Sinatra下的Rack中的劫持API相关的新功能和稍微临时功能的交互.这是相当复杂的,但一旦你得到它的悬念,它是很酷.这方面的完整信息在这里

…where it all got decided in a github thread: 07003

根据@rhk,没有正式支持WebSockets通过Rack劫持Sinatra,除了中间件,没有计划.所以它将永远是你选择性地处理的,基于你的服务器和实现风格的选择.

我处理的方式是使用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,但正如我所说,这是很有机架的.那里没有太多的Sinatra代码,因为它不是真正的Sinatra的东西.再次,正如我所提到的,它甚至没有真正计划变得无缝.这将是一个sinatra / contrib的东西或其他一些中间件.所以这里是我的方式,在一个我使用hijack_io的情况下,作为一个粗略的草图.

…a gist: 07007

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐