Ruby on Rails
Wednesday, October 28, 2015
I need to make realtime updates for all subscribers. After creating new record i need to publish it for all subscribers.
-- I found a solution using postgre listen/notify
In controller:
and model
Problems are
def index
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream)
begin
Comment.on_change do |data|
sse.write(data)
end
rescue IOError
# Client Disconnected
ensure
sse.close
end
render nothing: true
end
[...]
after_create :notify_comment_added
[...]
private
def notify_comment_added
Comment.connection.execute "NOTIFY comments, 'data'"
end
class << self
def on_change
Comment.connection.execute "LISTEN comments"
loop do
Comment.connection.raw_connection.wait_for_notify do |event, pid, comment|
yield comment
end
end
ensure
Comment.connection.execute "UNLISTEN comments"
end
end
Problems are
1) Every listeners occupies a connection to db, and after some clients its reach maximum and i got ActiveRecord timeout
2) it works only with config.cache_classes = true and config.eager_load = true otherwise servers froze on 1-2nd execution of controller. And its a big pain to restart server after every small change.
Does rails have any another solutions to perform this task?
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/0ec03c37-a117-4845-ad10-d02434669043%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment