内部应用程序的"基于Web"的推送通知

Rob*_*ert 4 javascript ajax jquery web-applications push-notification

我已经在解决一个问题,但是在我想要检查实现之前的想法之前,我还没有做过这样的事情.

基本上我需要修改一个现有的基于Web的应用程序,该应用程序有大约20个用户来添加推送通知.用户同时获取通知非常重要(PC-A不应在PC-B之前20秒收到警报).目前,系统处理AJAX请求,每隔20秒发送到服务器并请求任何更新并每次完全重建数据表(即使数据未更改).这看起来真的很草率,所以我提出了两种方法.

  1. 不要断开与服务器客户端的连接.我正在抛弃的这个想法涉及保持服务器和客户端之间的连接始终处于活动状态.带宽并不是任何解决方案的真正问题,因为内部网络只有大约20人.使用此解决方案,只要有更新,服务器就可以将Javascript推送到客户端,并相应地修改数据表.同样,每个连接的PC在尽可能接近的同时接收更新是非常重要的.这个的主要缺点是我的经验,我以前从未这样做过,所以我不确定它的效果如何,或者它通常是一个坏主意.

  2. 继续AJAX请求,但只是间隔响应.我想到的第二个解决方案是允许客户端按照惯例(当前每20秒)发出AJAX请求,但服务器只能以30秒的间隔响应(例如2:00:00和2:00:30)无论在那段时间内收到多少AJAX请求.这需要调整AJAX请求的超时以防止请求超时,但理论上听起来没问题,至少对我而言.

这仅适用于内部网络,因此带宽不是主要考虑因素,因此通知尽可能接近彼此接收.我对其他想法持开放态度,这些只是我到目前为止所想到的两个想法.

编辑

主要寻找每种方法的利弊.DashK有另一个有趣的方法,但我想知道是否有人有任何这些方法的经验,并可以证明每种方法的优点和缺点,或可能是另一种方法.

Cla*_*edi 12

如果我理解你的需求,我认为你应该看看Comet

Comet是一种Web应用程序模型,其中长期持有的HTTP请求允许Web服务器将数据推送到浏览器,而浏览器不会明确请求它.Comet是一个总称,涵盖了实现这种互动的多种技术.所有这些方法都依赖于浏览器中默认包含的功能,例如JavaScript,而不是非默认插件.

Comet方法不同于Web的原始模型,其中浏览器一次请求完整的网页.


Das*_*shK 8

如何使用XMPP服务器来解决问题?

XMPP最初设计为Instant Messaging平台,是一种消息传递协议,可使系统中的用户交换消息.(还有更多 - 但让我们保持简单.)

让我们稍微简化一下场景.想象一下:

你是系统管理员.当系统出现问题时,您需要让所有员工(其中大约20人)知道系统已关闭.

在过去,每个员工都会问你:"系统是否正常运行?" 每隔一小时左右,你就会被动地回应.虽然这有效,但是你负载过重 - 不是通过修复系统中断,而是每小时要求系统状态的20个人.

现在,AIM被发明了!由于每个员工都可以访问AIM,你会想,"嘿,他们每个人都加入'系统状态'聊天室怎么样,我只会在系统关闭时向房间发送消息(或者是背部)?" 通过这样做,有兴趣了解系统状态的员工将只是加入"系统状态"房间,并将收到系统状态更新的通知.

回到我们试图解决的问题......

  • 系统管理员="系统"谁想要通知网络应用程序用户.
  • 员工=希望接收通知的Web应用程序用户.
  • 系统状态聊天室=仍然是系统状态聊天室

当Web应用程序用户登录到您的Web应用程序时,使页面自动将其登录到XMPP服务器,然后加入系统状态聊天室.

当系统想要通知用户时,编写代码以登录XMPP服务器,加入聊天室,并向房间广播消息.

通过使用XMPP,您不必担心:

  • 设置"持久连接" - 一些开源XMPP服务器eJabberd/OpenFire内置了对BOSH的支持,XMPP实现了Comet模型.
  • 邮件如何传递

但是,您需要以下内容:

  • 找到一个可以帮助您登录XMPP服务器的Javascript库.(只是谷歌.有很多.)
  • 查找服务器端代码的XMPP库.(Java和C#都存在XMPP库.但是我不确定你在幕后使用什么系统.)
  • 在XMPP服务器上手动配置每个用户(看起来你只有20个人.这应该很容易 - 但是,如果组变大,你可能想要执行自动配置 - 这可以通过客户端Javascript XMPP库实现. )

就持久的AJAX调用而言,此实现受限于最多2个连接到同一域的问题.如果您为此XMPP调用使用了一个连接,则只有1个连接可以在Web应用程序中执行其他AJAX调用.根据您的webapp的复杂程度,这可能是也可能不合适,因为如果已经进行了2次AJAX调用,任何后续的AJAX调用都必须等到其中一个AJAX管道被释放,这可能导致"缓慢"你的应用.

您可以通过将所有AJAX调用转换为XMPP消息来解决此问题,并让服务器上有类似机器人的用户来侦听这些消息,并通过发回HTML数据片段/ JSON对象来响应它.然而,这可能对你想要达到的目标而言太过分了.

啊.希望这有意义......或不是.:p