2

Apache/Thin/Sinatra を使用して基本的なサーバー側イベント機能をセットアップしようとしています。シンサーバーを直接実行すると、すべてが期待どおりに機能します。RackBaseURI 構成設定を使用して Apache 経由で Thin サーバーを実行すると、すべてが機能しますが、接続は維持されません。開いて、ブラウザにデータを書き込んで、すぐに閉じるというサイクルを経ます。Apache の設定の問題のように見えますか?

Apache の設定を確認しましたが、接続を開くのを妨げるようなものは何もありません。エラーがどこにあるのかわからないので、無限の構成データを投稿したくないので、何か不足している場合はさらに含めることができます...

シナトラ (1.3.4)、シン (1.5.0)、Apache/2.2.22 (Ubuntu)、ルビー 1.8.7

JavaScript...

$j(function(){

  console.log("Starting...");

  var es = new EventSource("/stream_event");

  es.addEventListener('message', function(e) {
    console.log(e.data);
  }, false);

  es.addEventListener('open', function(e) {
    console.log("Connection Open");
  }, false);

  es.addEventListener('error', function(e) {
    console.log("error = " + e.eventPhase)
    if (e.eventPhase == EventSource.CLOSED) {
      console.log("Connection Closed");
    }
  }, false);
}

サーバー側のsinatra/ruby..

set :server, :thin
connections = []

get '/' do
  content_type 'text/event-stream'
  stream(:keep_open) { |out| 
    connections << out
    out << "data: hello\n\n" 
  }
end

get '/post_message' do
  connections.each { |out| out << params[:message] << "\n" }
  "message sent"
end

編集:

そして、これがブラウザコンソールに表示される出力です...

Connection Open
hello
error = 2
Connection Closed
Connection Open
hello
error = 2
Connection Closed 
Connection Open
hello
error = 2
Connection Closed 
Connection Open
hello
error = 2
Connection Closed 
Connection Open
hello
error = 2
Connection Closed  
4

1 に答える 1

0

RackBaseURI 構成設定に関連するもののようです。その属性を削除し、Apache のプロキシ機能を使用してトラフィックを Sinatra アプリに転送することで、問題を解決することができました...

ProxyPass /stream_event http://127.0.0.1:9292
ProxyPassReverse /stream_event http://127.0.0.1:9292

ここでの主な欠点は、他のプロセスを使用して、実行中の Sinatra アプリを手動で起動および監視する必要があることです。

于 2013-02-03T16:54:07.463 に答える