方法
- A
- I
- L
- N
- R
- S
类公共方法
new(adapter, event_loop) 链接
源代码: 显示 | 在 GitHub 上
# File actioncable/lib/action_cable/subscription_adapter/postgresql.rb, line 76 def initialize(adapter, event_loop) super() @adapter = adapter @event_loop = event_loop @queue = Queue.new @thread = Thread.new do Thread.current.abort_on_exception = true listen end end
实例公共方法
add_channel(channel, on_success) 链接
源代码: 显示 | 在 GitHub 上
# File actioncable/lib/action_cable/subscription_adapter/postgresql.rb, line 120 def add_channel(channel, on_success) @queue.push([:listen, channel, on_success]) end
invoke_callback(*) 链接
源代码: 显示 | 在 GitHub 上
# File actioncable/lib/action_cable/subscription_adapter/postgresql.rb, line 128 def invoke_callback(*) @event_loop.post { super } end
listen() 链接
源代码: 显示 | 在 GitHub 上
# File actioncable/lib/action_cable/subscription_adapter/postgresql.rb, line 89 def listen @adapter.with_subscriptions_connection do |pg_conn| catch :shutdown do loop do until @queue.empty? action, channel, callback = @queue.pop(true) case action when :listen pg_conn.exec("LISTEN #{pg_conn.escape_identifier channel}") @event_loop.post(&callback) if callback when :unlisten pg_conn.exec("UNLISTEN #{pg_conn.escape_identifier channel}") when :shutdown throw :shutdown end end pg_conn.wait_for_notify(1) do |chan, pid, message| broadcast(chan, message) end end end end end
remove_channel(channel) 链接
源代码: 显示 | 在 GitHub 上
# File actioncable/lib/action_cable/subscription_adapter/postgresql.rb, line 124 def remove_channel(channel) @queue.push([:unlisten, channel]) end
shutdown() 链接
源代码: 显示 | 在 GitHub 上
# File actioncable/lib/action_cable/subscription_adapter/postgresql.rb, line 115 def shutdown @queue.push([:shutdown]) Thread.pass while @thread.alive? end