为长轮询彗星应用程序

时间:2015-05-05 12:15:32

标签: angularjs promise comet long-polling angular-promise

TL; DR:是否有长焦点整合的Angular示例? (例子,特别是Comet示例会很好!)

我们当前的应用程序使用Angular和Comet。客户端发送长轮询请求保持打开状态,直到服务器返回数据。当服务器返回数据时,数据有效负载可能有多条消息用于不同的通道'。

开箱即用的Comet JS代码我们使用jQuery的$.get(), $.post()方法来进行长轮询请求。

Angular基于jQuery的简易版本,并通过Angular的$.get()/$.post()对象与$http相比增加了许多(与角度相关的)魔法。

我已经被告知Angular的$http对象,并且它返回的承诺与基于消息的前端不兼容,但我不相信

他们是不相容的吗?

我在想一个可以编写Comet的不同$httpProvider,这将提供一个$ http对象,基于URL可以确定它是否应该在正常的ajax模式或长轮询模式下运行。 / p>

这里的想法是,通常每个Comet通道都有一个消息监听器,并且监听器有一个它在消息中调用的回调。

对我来说,这似乎是一种伪装的承诺。通常,这个想法是为每个渠道创造一个承诺。当$ http对象处理长轮询请求时,当服务器响应数据时,它将知道如何将有效负载解析为每个通道的消息,然后解析每个通道(现在是Angular世界中的一个承诺)。解析每个通道会调用channels / promises then()函数。

这是否通过侦听器和回调实现基于消息的行为?这些只是一样的东西,但名字不同吗?

我正在考虑采用这种方法并可能对其进行原型设计。但在此之前,这是否有意义?

这些承诺如何在Angular HTML模板中解决,我仍然不确定。

是否已有Angular与长轮询集成的示例?

我找不到任何。

1 个答案:

答案 0 :(得分:0)

“这是否有意义?”,并不完全。

看来你需要客户端的是:

固定

  • 一组固定的Angualr侦听器(每个通道可能有一个,但每个通道可能有一个消息类型)。

每个轮询周期

  1. 长期发起人/听众
  2. 消息包解析器/事件广播器
  3. 当我读到这个问题时,似乎你可能没有明确区分(1)和(2)。

    (1)将是$http()请求,它返回一个承诺。

    (2)将是一个定制函数,只要满足请求(无论何时履行承诺),都会调用。

    因此,每个轮询周期将严格包含一个承诺,但一个或多个广播事件,将由固定的侦听器响应。

    它就像一个散射枪,每当它被触发时就会发射弹药筒(以及一组喜欢射击的自愿目标)。

    请注意,在这个定义级别,整个事物在概念上与常规短轮询相同,长轮询仅在请求和响应的时间上有所不同(这样服务器处于明显的控制中)。