问题标签 [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.
ruby - 优雅地断开与赛璐珞的 WebSocket 连接
情况
我通过 Chrome 的远程调试协议连接到一个 WebSocket ,使用 Rails 应用程序和一个实现赛璐珞的类,或者更具体地说,celluloid-websocket-client
.
问题是我不知道如何干净地断开 WebSocket。
当actor内部发生错误但主程序运行时,Chrome不知何故仍然使WebSocket不可用,不允许我再次附加。
代码示例
这是完全独立的代码:
我试过的
当我取消注释
@ws_client.close
时,我得到:但我认为这是委派的?至少该
.text
方法也有效?当我
terminate
改为调用(退出 Actor)时,WebSocket 仍然在后台打开。当我调用我在主代码中创建
terminate
的MeasurementConnection
对象时,它使 Actor 看起来死了,但仍然没有释放连接。
如何重现
您可以通过使用--remote-debugging-port=9222
命令行参数启动 Chrome,然后检查curl http://localhost:9222/json
并webSocketDebuggerUrl
从那里使用,例如:
如果没有webSocketDebuggerUrl
可用的,那么某些东西仍在连接到它。
当我使用EventMachine
类似于此示例时,它曾经可以工作,但不是与faye/websocket-client
,而是em-websocket-client
相反。在这里,在停止 EM 循环后(使用EM.stop
),WebSocket 将再次可用。
ruby-on-rails - 为什么 Sidekiq 不关闭旧连接?
我的 Rails 4.1 应用程序使用 Sidekiq 在赛璐珞演员中运行测量。它不断地耗尽数据库连接。Sidekiq 似乎每个作业打开 2 个连接,而旧连接永远不会正确关闭。
系统做什么
- 每 15 分钟,我启动一个
MeasurementWorker
. 通过调用MeasurementWorker.perform_async(measurement.id)
. 它这样做:
- 在此测量中,当我调用 时
.run
,它会执行以下操作:
- 这
MeasurementConnection
是一个简单的赛璐珞演员。这个actor内部没有与AR相关的代码。
配置
- 独角兽:并发设置为 3
- Sidekiq 3.3.0:并发设置为 50,并在初始化程序中:
database.yml
:池设置为 60,收割频率为 5- PostgreSQL 9.3:最大连接数为 2000,无其他修改
问题:打开的连接太多
当我检查时SELECT * FROM pg_stat_activity;
,我看到有一些旧连接打开,没有 Sidekiq 工作人员忙,还有一些新连接:
总共有 34 个连接,但我只进行了 15 次测量。
在sidekiq.log
中,它们都显示为done:
因此,对于每次测量,Sidekiq 似乎打开了 2 个连接,但它从不关闭它们。我应该怎么办?
ruby - 如何捕获机架应用程序的终止
我有一个 Sinatra 应用程序正在运行,并且有一些后台线程正在使用赛璐珞运行。当按下Ctrl+时C,我想干净地终止那些正在运行的代理。我如何干净地终止它们?
ruby - Ruby 未来的缓冲区?
我想得到一堆 XML 并解析它们。它们有点大。所以我想我可以在未来像这样获取并解析它们:(我目前使用赛璐珞)
如果它在实际需要之前不占用大量内存,那会很好。理想情况下,我希望它可以缓冲 3 个 XML 文件停止并等待至少 1 个被处理然后继续。我该怎么做?
ruby - 赛璐珞::应用守护程序后通知失败
我正在使用 Celluloid::Notifications 发布/订阅在两个演员之间进行通信。正常运行应用程序时一切正常,但是当我尝试在后台运行它时,订阅参与者无法收到通知。我已经尝试了许多不同的 gem 来守护所有这些似乎都会破坏通知。
该应用程序在使用 nohup 运行时确实可以工作,这让我相信这个问题与作为守护进程一部分的分叉有关。
ruby-on-rails - 在赛璐珞中动态分配演员
我正在学习如何使用Celluloid
. 我已阅读所有文档,并认为我知道如何使用它但缺乏实践。我将使用包含近 12,000 行的 CSV 文件对其进行测试。
我不确定我应该为一份工作分配多少演员。我猜这个数字应该是动态的。根据这个 railscasts 剧集,默认数字设置为您机器中的内核数,但您肯定应该根据您的工作负载更改此数字吗?
我有 12,000 条记录要通过,如果我执行下面的代码,我猜它会启动我池中的所有参与者并将它们排队处理工作。但是我应该如何衡量有多少演员要动态分配给作品呢?
我的理解还有很多漏洞,所以请随意挑战我的整个实现。
ruby - Http.rb 和赛璐珞超时的解决方法?
我知道 Http.rb 和 Celluloid[1] 目前不支持当前的超时,但是有临时解决方法吗?
这是我要运行的代码:
它的目标是测试服务器是否正常运行。我愿意接受替代品(例如%x(ping <server>)
),但这些似乎效率较低,实际上能够得到我正在寻找的东西。
ruby - Ruby: Connect to remote WebSocket
I'm trying to connect to remote websocket using Celluloid and Websocket client based on celluloid (gem 'celluloid-websocket-client'). The main advantage of this client for me is that I can use callbacks in the form of class methods instead of blocks.
The expected output is
However, I don't get any output at all. What could be the problem?
I am using
ruby - 为什么使用赛璐珞会出现随机错误?
我需要对 Web 服务进行 API 调用以检索日期。为此,我创建了一个示例以熟悉赛璐珞。在这里,我将使用 openweather API 进行“培训”。最终目标是同时运行多个请求。
我的预订舱位 (booking.rb) 获取数据
这就是我运行它的方式:
现在,当我多次运行它时,我确实收到了不同的错误消息:
所以我想知道这里发生了什么?帮助表示赞赏。提前致谢
ruby-on-rails - 部署到 EC2 sidekiq 后现在报告 SocketError: getaddrinfo: Name or service not known
应用程序是 Rails 4.1.4,Ruby 2.1.2。
使用 sidekiq 3.2.6、redis 3.1.0、赛璐珞 0.15.2。除了连接到远程 redis 队列(弹性缓存)外,sidekiq 实现是默认的。
当处理某些事件时,我们使用 sidekiq 对外部 API 的调用进行排队。该 API 可通过 curl 从我们的应用程序所在的服务器访问。所有其他功能似乎仍按预期执行。此功能在当前的服务器实现/架构上已经工作了数周。
在成功部署(使用 Capistrano,通过 Jenkins)到 EC2 实例后,该实例位于弹性负载均衡器后面,自动扩展组 sidekiq 将不再连接(?)到弹性缓存。
我们重启了 sidekiq,重启了弹性缓存,重启了服务器,用 redis-cli 检查了 redis 队列,没有发现任何值得注意的地方。
正如暗示的那样,我们可以使用 redis-cli 连接到弹性缓存,但是,sidekiq/api
从控制台使用,我们得到相同的结果SocketError
关于如何补救的任何想法?该应用程序在这一点上几乎无法使用。
谢谢!