并发 – 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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...