我正在寻找使用 WebSocket 组件和基于机架的前端运行的 web 应用程序。我最初的计划是使用 Camping 作为前端,在瘦服务器上运行服务器,机架config.ru
如下所示:
require 'rack'
require './parts/web-frontend'
require './parts/websocket'
AppStationary = Rack::File.new("./stationary")
run Rack::Cascade.new(AppWebSockets, AppWebPages, AppStationary)
AppWebSockets
由 websocket-rack 提供,效果很好。在没有Upgrade: WebSocket
请求的情况下,它只是 404,并且请求沿着级联运行到露营应用程序,AppWebPages
.
很明显,这个露营 web 应用程序不可避免地需要访问 IO,以使用常规 http 请求与 CouchDB 数据库通信。有很多方法可以进行 http 请求,包括一些与 eventmachine 兼容的异步库。如果我订阅回调,机架会返回,并且在我准备好创建响应时页面已经响应。我希望能够通过 Ruby 1.9 的 Fibers 使用 em-synchrony 来获得一些并发性——我刚刚开始了解它——但找不到任何关于如何将 em-synchrony 与 Thin 一起使用的文档.
我遇到了一个名为 Goliath 的网络服务器,它声称与 Thin 类似,具有 em-synchrony 支持,但它缺少用于启动和测试服务器的命令行实用程序,并且似乎需要我将不同类型的文件写入rackup,这是非常令人反感的。目前还不清楚它是否会支持 websocket-rack,它目前只指定对 Thin 的支持。
有什么好的方法可以避免阻塞 IO,同时仍然使用熟悉的基于机架的工具,如露营和访问 WebSockets?