我已经编写了一个开源的Rack应用程序和核心文件来汇集Tradeking.com的股票报价。这是机架应用程序:https://github.com/chaddjohnson/trading_websocket_service。这是核心库:https://github.com/chaddjohnson/trading_core。
我修改了trading_core / lib / trading_core / quote_streamer / tradeking.rb以将流数据输出到控制台,如下所示:
@http.stream do |data|
puts data
经过几个小时的流式传输并输出到控制台后,它就会冻结。我完全不知道为什么。我已尽力确保任何循环都不是无限的。我已经调试了一个多星期了。
为什么会发生这种情况?
以下是我认为可能发生这种情况的主要文件:
答案 0 :(得分:1)
首次查看代码时,我可以想象出两个原因:
答案 1 :(得分:1)
很高兴我能把你推向正确的方向!
我的第一次预感是关于公开联系:
您可能需要确保关闭连接:@ http.close in 在您引用的方法结束时的确保块
接着进行一些取证:
听起来你必须深入研究你正在运行的红宝石过程 弄清楚是什么窒息了。取决于您所使用的操作系统 当然,在mac和linux上你可以使用像gdb,strace,dtrace这样的工具, 等。例如: ruby.dzone.com/articles/debugging-stuck-ruby-processes
我们发现select
被大量召唤,这使我们对连接产生了怀疑。 原来问题在于通过@api ||= ...init code...