我将构建一个Web应用程序,它将接受来自外部源的不同事件,并快速将它们呈现给用户以进行进一步的操作。我想将Ruby on Rails用于Web应用程序。该项目是一个内部开发项目。我希望简单易用的解决方案能够在高可靠性和复杂系统上快速开发。
它应该做什么
用户在其浏览器中打开了Web应用程序。现在打来的电话就是。电话呼叫由PBX监控守护程序注册。在这种情况下,通过Asterisk Manager界面。守护程序以某种方式向Web应用程序发送可用信息(远程扩展,本地扩展,呼叫方向,通道状态,开始时间,结束时间)。接下来,用户收到有关电话呼叫事件的通知。用户现在可以使用它。例如,输入摘要或将呼叫与客户资料匹配。
从PBX上的第一个事件(例如,创建新频道)到浏览器中的弹出通知的持续时间应该很短。鉴于网络速度快,我希望在两秒钟内完成。有关事件的单条信息是异步创建的。本地扩展可以与远程扩展分开提供。用户可以在呼叫结束前输入摘要。一方挂断后,界面上会显示结束时间,新状态等。
PBX监视器只是一个数据源。将有更多的监视器,如电子邮件或通过Web表单的请求。监视守护程序不一定与数据库或Web服务器在同一主机上运行。我没有想象应用程序将很快为数千个登录用户或并发请求服务。但是从设计中,每分钟可能大约相同数量的事件的200个用户不应该是可扩展性问题。
我该怎么办?
我很想知道如何设计这样的应用程序。你会建议什么技术?守护进程如何传达他们的信息?关于存储在主数据库中的事件的数据何时以及由谁?如何通知用户?浏览器是否应该代表守护程序接收完整的数据集,或者仅仅是新数据可用的简短说明?使用哪个JS库以及如何在服务器端创建必要的代码?
在我的研究中,我遇到了很多可能性:消息代理,队列服务,一些rails后台任务解决方案,HTTP推送服务,XMPP等等。我将研究的一些产品:ActiveMQ,Starling和Workling,Juggernaut和Bosh。
也许我的目标太高了?如果有一种更简单或更简单的方法,比如只使用Rails的XML或JSON接口,我想更多地阅读它。
我希望文字不会太长:)
感谢。
答案 0 :(得分:1)
你可以通过多种方式解决这个问题,但我唯一的评论是:推,不拉。对于低延迟,它不仅更快更有效,因为您的服务器现在不必每秒轮询数据库/队列来处理n *客户端。 ActiveMQ没问题,但如果你不是在寻找疯狂的持久性水平,Starling可能会更好地为你服务。
你几乎肯定最终会在客户端使用Flash(Juggernaut上次检查时使用它)或Java。这对您的客户来说可能是一个问题(如果他们没有安装Flash / Java),但对大多数人来说这不是问题;仍然,拉动通知系统的回退机制可能是谨慎实施的。
答案 1 :(得分:1)
如果你想跳过Java和Flash,或许使用Comet系列中的技术从服务器推送到浏览器是有意义的吗?
http://en.wikipedia.org/wiki/Comet_%28programming%29
为了简单起见,对于从守护进程到Web浏览器的通知,我将Rails留在中间,为该Rails应用程序创建一个RESTful接口,并让所有守护进程向其报告。然后在您的守护进程中,您可以执行一些简单的操作,例如使用curl或libcurl发布通知。然后,Rails应用程序将负责收集来自各种来源的传入通知,并通过使用Comet解决方案的JavaScript或通过使用Flash或Java实现的某种更胖的客户端将它们报告给浏览器。
答案 2 :(得分:0)
也许http://goldfishserver.com可能会对您有所帮助。它提供了一个简单的API,允许推送通知到您的网页。简而言之,当您的数据更新时,将其(一些有效负载数据)发送到Goldfish服务器,并通过相同的数据通知您的客户端浏览器。
免责声明:我是一名从事金鱼工作的开发人员。
答案 3 :(得分:0)
摘要::使用操作电缆。
(另外:当您拥有ActionCable时,为什么还要使用Pusher之类的外部服务?有人说可伸缩性和基础架构管理。但是我对这些问题的评论还不够。)