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 アプリケーションは、通常の http リクエストを使用して CouchDB データベースと通信するために、必然的に IO へのアクセスを必要とすることが明らかになりつつあります。eventmachine と互換性のある非同期ライブラリなど、http リクエストを実行する方法はたくさんあります。コールバックをサブスクライブすると、ラックが返され、応答を作成する準備が整うまでに、ページは既に応答しています。em-synchrony を使用して、Ruby 1.9 のファイバーを介して同時実行性を取得できるようにしたいと考えています。 .
em-synchrony サポートが組み込まれている、シンに似ていると主張する Goliath と呼ばれる Web サーバーに遭遇しましたが、サーバーを起動してテストするためのコマンド ライン ユーティリティがなく、別の種類のファイルをこれはかなり不快です。また、現在 Thin のサポートのみを指定している websocket-rack をサポートするかどうかも不明です。
キャンプや WebSocket へのアクセスなどの使い慣れたラックベースのツールを利用しながら、IO のブロックを回避するための良い方法は何ですか?