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