9

我需要访问我的 Sidekiq 工作人员中当前的赛璐珞演员,但我看不到这样做的方法。

每当我尝试打电话时:

Celluloid::Actor.current

我收到一个错误:not in actor scope

我试图通过每次创建一个新演员来找到当前演员:

Celluloid::Actor.new(SecureRandom.hex)

但由于某种原因,它给了我一个错误attempted to call dead actor

我应该做些什么不同的事情来让当前的演员进入 Sidekiq 工作人员?

背景信息 我正在连接到我的工作人员中的 websocket 并向其发送消息。

Celluloid::WebSocket::Client.new('ws://my-uri', Celluloid::Actor.current)

4

1 回答 1

1

猜猜你应该定义一个单独的类,包括赛璐珞,这是一个基于Sidekiq repo 中的一个示例

class MyWebSocketWhatever
  include Celluloid

  def initialize(url)
    @ws_client = Celluloid::WebSocket::Client.new url, Celluloid::Actor.current
  end

  def send_message(msg)
    @ws_client.text msg
  end

  def on_message(msg)
    $redis.lpush 'sinkiq-example-messages', "RESPONSE: #{msg}"
  end
end

class SinatraWorker
  include Sidekiq::Worker

  def perform(msg='lulz you forgot a msg!')
    $redis.lpush 'sinkiq-example-messages', "SENT: #{msg}"
    MyWebSocketWhatever.new('ws://echo.websocket.org').send_message msg
  end
end    

就像一个魅力,刚刚玩完它。获取完整更新的示例,安装所需的 gem,然后启动 Sinatra 和 Sidekiq

sidekiq -r ./sinkiq.rb
ruby ./sinkiq.rb

然后浏览到http://localhost:4567

于 2013-08-05T17:08:53.337 回答