私は、次のシナトラアプリを持っている:sinatra streaming apiを使用してredis接続を閉じるにはどうすればよいですか?
require 'sinatra'
require 'redis'
require 'json'
class FeedStream < Sinatra::Application
helpers do
include SessionsHelper
def redis
@redis ||= Redis.connect
end
end
get '/feed', provides: 'text/event-stream' do
stream do |out|
redis.subscribe "feed" do |on|
on.message do |channel, message|
event_data = JSON.parse message
logger.info "received event = #{event_data}"
out << "event: #{event_data['event']}\n"
out << "data: #{{:data => event_data['data'],
:by => current_user}}.to_json\n\n"
end
end
end
end
end
基本的に、それはRedisののpubsubを使ってフィードを他のユーザーによって公開されたイベントを受信し、それがシナトラストリーミングAPIでこれらのイベントを送信します。 問題は、ブラウザがフィードに再接続すると、レディスクライアントが接続されたままになり、イベントを受信し続けるため、レディスサーバーが無駄な接続でいっぱいになるということです。 broserがWebサーバーへの接続を閉じると、この接続をすべて閉じることができますか?
これを今までに把握できましたか?私はRailsで同様の問題に遭遇し、[同様の質問を投稿しました](http://stackoverflow.com/q/18970458/877472)。この質問には解決策が含まれていますが、これはうまくいくものの、非常にうっ血です。 –