我需要向使用RoR编写的基于Web的监控系统发送警报。蛮力解决方案是经常使用javascript轮询轻量级控制器。当然,缺点是为了在警报上获得紧张的响应时间,我必须经常轮询(每5秒钟)。
我的一个想法是让AJAX发起的轮询线程在服务器端休眠,直到警报到达服务器。然后,服务器将唤醒休眠线程并获得将立即显示的Web客户端的响应。这样我就可以将轮询间隔减少到每30秒或每分钟一次,同时缩短提醒用户的时间。
我没有指望的一件事是mongrel / rails没有像我预期的那样为每个web请求启动一个线程。这意味着其他传入的Web请求会阻塞,直到第一个线程的休眠超时。
我尝试过调用“config.threadsafe!”在我的配置中,但似乎没有改变每个请求模型的线程的行为。另外,它似乎与config.threadsafe一起运行!是一个冒险的命题,可能需要对我现有的应用程序进行大量的测试和返工。
对于我采取的方法有什么想法或更好的方法来获取我正在寻找的响应时间,而不需要使用请求来淹没服务器?
答案 0 :(得分:1)
您可以使用Rails Metal来提高控制器性能,甚至可以将其完全分离到Sinatra应用程序中(Sinatra可以处理一些严重的请求吞吐量)。
另一个想法是使用Juggernaut或类似的方法来研究推送解决方案。
答案 1 :(得分:0)
您可以考虑的一种方法是让您的(部分或全部)请求在external queue中创建延迟监控作业,然后定期通知监控应用程序。
答案 2 :(得分:0)
您需要的是Juggernaut这是一个Rails插件,它允许您的应用启动连接并将数据推送到客户端。换句话说,您的应用程序可以实时连接到服务器,具有即时更新的优势。