问题标签 [celluloid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1196 浏览

ruby - Sidekiq 当前的赛璐珞演员

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

每当我尝试打电话时:

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

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

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

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

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

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

0 投票
1 回答
801 浏览

ruby - 在 jruby 线程设置中使用 redis

所以redis gem应该是线程安全的,这很好。但我想知道我需要如何设置它。我正在使用 jRuby 和赛璐珞(使用默认纤维)。

我现在使用它的方式是定义了一个全局方法:

我将 Redis 客户端的超时参数设置为 30。我认为不会出现任何线程安全问题(我确实在生成线程之前对其进行了初始化),但是有时我开始收到Redis::TimeoutError错误,所以我想知道这些线程是否可能永远保持打开的连接并最终占用所有可用的连接?

基本上问题是有时我会得到 Redis::TimeoutError。有没有办法可以检查在某个时刻打开了哪些连接?或者知道问题可能是什么?

谢谢

0 投票
1 回答
431 浏览

ruby-on-rails - ActiveRecord 和 jRuby 线程/纤维 (Rails 4)

我正在使用 jRuby 和赛璐珞(默认 task_class 所以它应该是纤维)。

我将我的数据库内容包装在 ActiveRecord::Base.connection_pool.with_connection 中,但我可能在某个地方错过了它(无论如何如何找到它?)。

我有时会收到 ActiveRecord::ConnectionTimeoutError 错误,我想避免这种情况。理论上,我的 database.yml 池设置对于我拥有的线程数量应该足够高。

在(真实)线程情况下使用 ActiveRecord 的正确方法是什么?如果可能的话,当我没有明确使用 ActiveRecord::Base.connection_pool.with_connection 时,我希望避免 ActiveRecord 自动检查连接。请注意,这是一个后台应用程序,而不是为 Web 客户端提供服务的传统 Rails 应用程序。

我正在使用 jRuby 和 Rails 4 rc1。对于 DB,我在 Heroku 上使用生产级 Postgres,因此 DB 的性能应该不是问题。

0 投票
1 回答
909 浏览

ruby - Ruby 处理数千个异步请求的最佳方式?

任务是几乎实时处理报价报价(1 秒延迟)。

目前我需要处理大约一百个报价,但可能会增加到数千个。我正在查看EM当前要运行的十个线程,每个线程将运行十个异步请求并将数据放入一些 PubSub 以供以后处理。

我也在Celluloid-IOHTTPgem 进行测试。

我走对了吗?试图检查 GitHub 是否有我正在尝试实现但失败的smth。

0 投票
2 回答
1067 浏览

ruby - 赛璐珞回调

使用赛璐珞时,如何在异步方法完成其工作(回调)时收到通知?

示例代码:

我想在 foo 内部的工作完成后立即收到通知。

0 投票
1 回答
306 浏览

ruby - 如何设计和构建使用 Actors 的程序

Joe Armstrong 的论文中,他指出应该通过以下三个步骤来设计基于 Actor 的程序。问题是,我不明白这些步骤如何映射到现实世界的问题或如何应用它们。这是乔的原始建议。

  1. 我们在现实世界的活动中识别出所有真正并发的活动。
  2. 我们识别并发活动之间的所有消息通道。
  3. 我们写下所有可以在不同消息通道上流动的消息。现在我们编写程序。程序的结构应该完全遵循问题的结构。在我们的编程语言中,每个现实世界的并发活动都应该映射到一个准确的并发进程上。如果问题与程序有 1:1 的映射,我们就说程序与问题同构。

映射恰好是 1:1,这一点非常重要。这样做的原因是它最小化了问题和解决方案之间的概念差距。如果这个映射不是 1:1,程序会很快退化,变得难以理解。当使用非 CO 语言解决并发问题时,通常会观察到这种退化。通常,让程序工作的唯一方法是强制几个独立的活动由同一个语言线程或进程控制。这导致不可避免的清晰度损失,并使程序受到复杂且不可重现的干扰错误的影响。

我认为#1很容易弄清楚。这是我迷路的#2(和3)。为了说明我的挫败感,我删除了这个 gist 中提供的一个小服务(带有回调的 Ruby 服务)。

查看该示例服务,我可以看到如何回答 #1。我们有 5 个并发服务。

  1. 开始
  2. 登录网关
  3. 注销网关
  4. 停止
  5. 订阅

根据服务所处的状态,其中一些服务不起作用(或不应该)。如果服务尚未启动,那么登录/注销/订阅就没有任何意义。这种状态信息与乔的 3 步有什么关系吗?

无论如何,鉴于该要点中的示例/模拟服务,我想知道有人将如何设计一个程序以以 Actory 方式包装该服务。我只想查看有关如何应用 Joe 的 3 个步骤的指南列表。编写一些代码(任何语言)的奖励积分。

0 投票
1 回答
1122 浏览

ruby - 与赛璐珞保持许多联系的正确方法?

我目前正在开发一个从许多 IMAP 邮箱中提取邮件的应用程序。看起来赛璐珞很适合这个角色,但我不确定如何聘请演员。

该应用程序将以分布式方式运行。有x 个要轮询的邮箱和y个进程,这些邮箱将在其中进行划分。所以每个进程都有一个他们必须轮询的邮箱列表,这个列表会不时改变。这意味着每个进程维护的连接池是动态的。

我最大的问题是:我应该为每个邮箱生成一个单独的 ImapConnection 演员,还是应该制作一个 ImapListener 演员来管理内部所有连接?

我目前的设计采用了前一种解决方案。有一个中央 Coordinator actor 保持一系列 actor,每个 actor 管理一个 imap 连接。一个新的连接被添加了一个简单的:

ImapConnection 要么定期轮询 IMAP 服务器,要么保持一个空闲连接。如果 Coordinator 想要停止轮询邮箱,它会在其 @connections 数组中查找它并正确处理它。

这对我来说似乎是一种合乎逻辑的方法,它产生了赛璐珞的许多好处(例如自动重启崩溃的演员),但我正在努力寻找使用这种方法的其他软件的例子。以这种方式生成 100 个演员是否正确使用了演员模型,还是我应该使用不同的方法?

0 投票
0 回答
153 浏览

ruby-on-rails - 设置全球赛璐珞池

我在 Rails 应用程序中使用赛璐珞池在用户上传文件后卸载 pdf 转换。

我使用初始化程序为应用程序创建了一个全局转换池。

在我的开发环境(OS X,thin)中一切顺利。在我的 CentOS 机器(Apache,Passenger)上运行它也没有问题。

这基本上是初始设置:

config/initializers/converter_pool.rb

lib/X/convert.rb

lib/X/convert_async.rb

在某个阶段,我的池停止在 CentOS 机器(usertest env)上工作,但在我的开发环境中继续正常。

附加说明:当通过控制台调用更新图像的方法时,池仍然有效。我猜这个问题与加载顺序或某种权限有关。

不确定是什么原因造成的——有一个新的 Linux 内核和 gems 更新。

经过各种尝试,我终于通过在类定义之后初始化池并删除​​池的初始化程序来让它再次工作。

我仍然有问题,因为我想更好地了解发生了什么。

有谁知道可能是什么原因造成的?在类定义之后实例化赛璐珞池是个坏主意吗?有没有潜在的问题?

非常感谢任何可以阐明的人:)干杯,尤金

0 投票
1 回答
509 浏览

ruby-on-rails - 带有 MRI Ruby 的赛璐珞/Sidekiq 和 Rails 3.2 以及以前不是为线程安全而设计的应用程序,它可行吗?

我有一个在乘客上运行 MRI Ruby 和 Rails 3.2 的大型项目,其应用程序在设计时并未考虑线程安全,并且该应用程序通过 DelayedJob 处理邮件,数据库为此付出了沉重的代价。

sidekiq railscast http://railscasts.com/episodes/366-sidekiq中提到了一些可能的问题,包括:

  1. 数据库连接限制(如果使用 1 的线程池,则数据库连接限制应加倍)
  2. 线程安全(这可能是表演的终结者)
  3. 纤维安全?这是 AR 的问题吗?

所以,问题是:

  1. 使一个大项目的线程安全到足以使邮件生成在乘客进程内的线程中工作的可行性如何?(邮件非常复杂,依赖于 AR)
  2. 使用 sidekiq 时出现同样的问题,“让一个大型项目线程安全以使邮件生成能够使用 sidekiq 工作有多可行?(邮件足够复杂,依赖于 AR)”
  3. 除了 db 连接限制和线程安全问题,还有什么需要考虑或不太明显的 got'chas 我没有预见到?
0 投票
1 回答
153 浏览

ruby - 是否有 Zlib::GzipReader 的非阻塞形式?

我正在尝试使用Zlib::GzipReader从管道读取数据来实现流式 Gzip 解压缩器,但我似乎无法弄清楚如何以非阻塞方式进行操作。这是相关的代码:

如何在不将整个压缩字符串读入阅读器的情况下流式传输解压缩的内容?