3

我将构建一个 Web 应用程序,它将接受来自外部源的不同事件并将它们快速呈现给用户以进行进一步操作。我想在 Web 应用程序中使用 Ruby on Rails。本项目为内部开发项目。我更喜欢简单易用的快速开发解决方案,而不是高度可靠和复杂的系统。

它应该做什么

用户在其浏览器中打开了 Web 应用程序。现在一个电话来了。电话呼叫由 PBX 监控守护程序注册。在这种情况下,通过 Asterisk Manager 界面。守护进程以某种方式将可用信息(远程分机、本地分机、呼叫方向、频道状态、开始时间、结束时间)发送到 Web 应用程序。接下来,用户会收到有关电话呼叫事件的通知。用户现在可以使用它。例如,通过输入摘要或将呼叫与客户资料相匹配。

从 PBX 上的第一个事件(例如创建新频道)到浏览器中弹出通知的持续时间应该很短。给定一个快速的网络,我希望在两秒钟内。有关事件的单条信息是异步创建的。本地分机可以与远程分机分开提供。用户可以在通话结束之前输入摘要。结束时间、新状态等会在一方挂断后立即显示在界面上。

PBX 监视器只是一种数据源。将有更多的监视器,如电子邮件或通过网络表单提出的请求。监控守护程序不一定与数据库或 Web 服务器在同一主机上运行。我不认为该应用程序将很快为成千上万的登录用户或并发请求提供服务。但从设计来看,每分钟事件数量可能大致相同的 200 个用户不应该是可扩展性问题。

我应该怎么做?

我很想知道您将如何设计这样的应用程序。你会建议什么技术?守护进程如何传递它们的信息?有关事件的数据何时以及由谁存储到主数据库中?用户如何得到通知?浏览器应该代表一个守护进程接收一个完整的数据集,还是只是一个简短的说明新数据可用?使用哪个 JS 库以及如何在服务器端创建必要的代码?

在我的研究中,我遇到了很多可能性:消息代理、队列服务、一些 Rails 后台任务解决方案、HTTP 推送服务、XMPP 等等。我要研究的一些产品:ActiveMQ、Starling 和 Workling、Juggernaut 和 Bosh。

也许我的目标太高了?如果有更简单或更简单的方法,比如只使用 Rails 的 XML 或 JSON 接口,我想阅读更多。

我希望文字不要太长:)

谢谢。

4

4 回答 4

1

您可以通过多种方式解决此问题,但我唯一的评论是:推,不要拉。对于低延迟,它不仅更快而且更高效,因为您的服务器现在不必每秒处理一次轮询数据库/队列的 n*clients。ActiveMQ 是可以的,但如果您不是在寻找疯狂的持久性级别,Starling 可能会为您提供更好的服务。

您几乎可以肯定最终会在客户端使用 Flash(我上次检查时 Juggernaut 使用它)或 Java。这对您的客户来说可能是个问题(如果他们没有安装 Flash/Java),但对大多数人来说这不是问题;尽管如此,在拉取通知系统上的回退机制可能是谨慎实施的。

于 2009-07-16T17:29:07.547 回答
1

如果您想跳过 Java 和 Flash,也许使用 Comet 系列中的技​​术来进行从服务器到浏览器的推送是有意义的?

http://en.wikipedia.org/wiki/Comet_%28programming%29

为了简单起见,对于从守护进程到 Web 浏览器的通知,我将 Rails 留在中间,为该 Rails 应用程序创建一个 RESTful 接口,并让所有守护进程向它报告。然后在你的守护进程中,你可以做一些简单的事情,比如使用 curl 或 libcurl 来发布通知。然后,Rails 应用程序将负责收集来自各种来源的传入通知并将它们报告给浏览器,或者通过使用 Comet 解决方案的 JavaScript,或者通过使用 Flash 或 Java 实现的某种更胖的客户端。

于 2009-07-23T16:53:20.733 回答
0

也许http://goldfishserver.com可能对您有用。它提供了一个简单的 API 来允许将通知推送到您的网页。简而言之,当您的数据更新时,将其(一些有效负载数据)发送到 Goldfish 服务器,您的客户端浏览器将收到通知,其中包含相同的数据。

免责声明:我是一名开发金鱼的开发人员。

于 2010-01-12T23:35:28.037 回答
0

问题

  • 有一个事件 - 或者是外部的(或者可能是在您的应用程序内部)。
  • 应通知用户。

一种解决方案

  • 我自己也面临这个问题。我还没有解决它,但这就是我打算这样做的方式。它也可以帮助你:

(A) 应用程序必须了解事件(通过暴露的端点)

  • 公开一个端点,通过该端点可以通知您的应用程序有关外部事件。
  • 当到达终点时(并且在身份验证之后,需要通知用户)。

(B) 通知

  • 您可以通过更改他们所在的当前网页上的 DOM 来直接通知用户。
  • 您可以使用 Push API 通知用户(但您需要确保您的浏览器可以针对它)。
  • 所有这些通知功能都应该能够通过 Action Cable 处理:(i) 通过更新 DOM 以在有电话来电时通知您,或 (ii) 通过在浏览器中弹出的推送通知。

摘要:使用动作电缆。

(另外:为什么要使用像 Pusher 这样的外部服务,当您可以使用 ActionCable 时?有人说可扩展性和基础架构管理。但我对这些问题的评论不够了解。)

于 2020-11-27T01:59:02.910 回答