首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby Redis与em-synchrony和PubSub问题

Ruby Redis与em-synchrony和PubSub问题
EN

Stack Overflow用户
提问于 2012-10-02 01:30:18
回答 1查看 1.1K关注 0票数 2

我正在使用Cramp框架、Redis gem、em-synchrony和WebSockets来构建一个与聊天相关的web应用程序,但是遇到了一些问题。

考虑以下代码:

代码语言:javascript
复制
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是从我的cramp操作的on_message事件处理程序中调用的,因为Cramp支持同步和纤程,在客户端加入通道后,@subscriber.subscribe块作为非阻塞块运行,这意味着它接受在pubsub通道上获取的消息,并且不会阻塞进程中的其他所有内容(应用程序没有被阻塞),但是它不会移动到下一行(puts "fetching history items"),这对我来说是一个主要问题。有谁得到了一个提示,可以做些什么来纠正这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2012-10-08 18:49:58

我发现Cramp不是很有用,可以使用普通的Sinatra,here就是一个例子。考虑加入rack-fiber_pool,同步适配器不能用于相同的目的(example)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12678094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档