簡體   English   中英

Ruby Redis出現em-synchrony和PubSub問題

[英]Ruby Redis with em-synchrony and PubSub problems

我將Cramp框架與Redis gem,em-synchrony和WebSockets一起使用來構建與聊天相關的Web應用程序,但遇到了一些問題。

考慮以下代碼:

class DrawingAction < Cramp::Action
  use_fiber_pool

  self.transport = :websocket

  on_start :user_joined
  on_data :message_received
  on_finish :user_left

  def user_joined
    # Create pub/sub clients for the user who just joined
    initialize_pub_sub
  end

 def initialize_pub_sub
   @@redis_client ||= Redis.new(:driver => :synchrony)

   @publisher ||= Redis.new(:driver => :synchrony)
   @subscriber ||= Redis.new(:driver => :synchrony)
 end


def handle_join(join_data)
  room_name = join_data[:room_name]

  @subscriber.subscribe(room_name) do |on|
    on.message do |channel, message|
      render message
    end
  end

  puts "fetching history items"
  history_items = history_for_room(room_name)
  render "{ \"history\": true, \"time:\": #{Time.now.to_f}, \"data\": [#{history_items.join(',')}] }"
end

handle_join被從被叫on_message我的痙攣作用的事件處理程序,由於抽筋支持同步和纖維,客戶機加入的信道之后,@ subscriber.subscribe塊作為非阻塞像它應該運行時,這意味着它接受郵件拿來pubsub通道,並且不會阻止進程中的其他所有內容(應用程序不會被阻止),但是它不會繼續前進到下一行( puts "fetching history items" ),這對我來說是一個主要問題,有人得到了有關如何解決此問題的提示?

我發現Cramp沒什么用,可以使用普通的Sinatra, 是一個示例。 考慮將rack-fiber_pool添加到混合中。 同步適配器不能用於相同的目的( 示例 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM