为长轮询彗星应用编写 $httpProvider
writing an $httpProvider for a long-polling comet app
TL;DR: 是否有 Angular 与长轮询集成的示例? (示例,特别是彗星示例会很好!)
我们当前的应用程序使用 Angular 和 Comet。客户端发出长轮询请求,这些请求保持打开状态,直到服务器有数据到达 return。当服务器 returns 数据时,数据负载可能有几条消息用于不同的 'channels'.
我们拥有的开箱即用的 Comet JS 代码使用 jQuery 的 $.get(), $.post()
方法来发出长轮询请求。
Angular 建立在 jQuery 的精简版之上,与 $.get()/$.post()
相比,通过 Angular' 添加了很多(Angular 相关的)魔法s $http
对象。
有人告诉我 Angular 的 $http
对象及其 return 的承诺与基于消息的前端不兼容,但我不是确信
他们真的不相容吗?
我在想可以编写一个不同的 $httpProvider
可以感知彗星,它将提供一个 $http 对象,基于 URL 可以确定它是否应该正常运行 ajax 模式或长轮询模式。
这里的想法是,通常每个 Comet 通道都有一个消息侦听器,并且该侦听器有一个回调,它调用传递消息。
对我来说,这似乎是变相的承诺。一般来说,这个想法是为每个渠道创建一个承诺。当 $http 对象处理长轮询请求时,当服务器响应数据时,它会知道如何将负载解析为每个通道的消息,然后解析每个通道(现在是 [=49= 中的承诺) ] 世界)。解析每个通道会产生调用 channels/promises then() 函数的效果。
这不是通过监听器和回调来实现基于消息的行为吗?这些只是相同的东西,只是名称不同吗?
我正在考虑尝试使用该方法并可能对其进行原型设计。但在我这样做之前,这是否有意义?
这些承诺如何在 Angular HTML 模板中解决我仍然不确定。
是否已经有 Angular 与长轮询集成的示例?
我找不到。
"Does this even make sense?",不完全是。
看来您需要的客户端是:
固定
- 一组固定的 Angualr 侦听器(可能每个频道一个,但可能每个频道每个消息类型一个)。
每个轮询周期
- 长轮询发起者/监听者
- 消息包解析器/事件广播器
看问题的时候,好像你没有把(1)和(2)分清楚。
(1) 将是一个 $http()
请求,returns 一个承诺。
(2) 将是一个定制函数,每当请求得到满足时(每当承诺实现时)就会被调用。
因此,每个轮询周期将严格包含一个承诺,但一个或多个广播事件,将由固定听众
它就像一把散弹枪,每次扣动扳机时都会发射一发子弹(以及一组喜欢被射击的自愿目标)。
请注意,在这个定义级别,整个事情在概念上与常规短轮询相同,而长轮询仅在请求和响应的时间上有所不同(这样服务器显然处于控制之中).
TL;DR: 是否有 Angular 与长轮询集成的示例? (示例,特别是彗星示例会很好!)
我们当前的应用程序使用 Angular 和 Comet。客户端发出长轮询请求,这些请求保持打开状态,直到服务器有数据到达 return。当服务器 returns 数据时,数据负载可能有几条消息用于不同的 'channels'.
我们拥有的开箱即用的 Comet JS 代码使用 jQuery 的 $.get(), $.post()
方法来发出长轮询请求。
Angular 建立在 jQuery 的精简版之上,与 $.get()/$.post()
相比,通过 Angular' 添加了很多(Angular 相关的)魔法s $http
对象。
有人告诉我 Angular 的 $http
对象及其 return 的承诺与基于消息的前端不兼容,但我不是确信
他们真的不相容吗?
我在想可以编写一个不同的 $httpProvider
可以感知彗星,它将提供一个 $http 对象,基于 URL 可以确定它是否应该正常运行 ajax 模式或长轮询模式。
这里的想法是,通常每个 Comet 通道都有一个消息侦听器,并且该侦听器有一个回调,它调用传递消息。
对我来说,这似乎是变相的承诺。一般来说,这个想法是为每个渠道创建一个承诺。当 $http 对象处理长轮询请求时,当服务器响应数据时,它会知道如何将负载解析为每个通道的消息,然后解析每个通道(现在是 [=49= 中的承诺) ] 世界)。解析每个通道会产生调用 channels/promises then() 函数的效果。
这不是通过监听器和回调来实现基于消息的行为吗?这些只是相同的东西,只是名称不同吗?
我正在考虑尝试使用该方法并可能对其进行原型设计。但在我这样做之前,这是否有意义?
这些承诺如何在 Angular HTML 模板中解决我仍然不确定。
是否已经有 Angular 与长轮询集成的示例?
我找不到。
"Does this even make sense?",不完全是。
看来您需要的客户端是:
固定
- 一组固定的 Angualr 侦听器(可能每个频道一个,但可能每个频道每个消息类型一个)。
每个轮询周期
- 长轮询发起者/监听者
- 消息包解析器/事件广播器
看问题的时候,好像你没有把(1)和(2)分清楚。
(1) 将是一个 $http()
请求,returns 一个承诺。
(2) 将是一个定制函数,每当请求得到满足时(每当承诺实现时)就会被调用。
因此,每个轮询周期将严格包含一个承诺,但一个或多个广播事件,将由固定听众
它就像一把散弹枪,每次扣动扳机时都会发射一发子弹(以及一组喜欢被射击的自愿目标)。
请注意,在这个定义级别,整个事情在概念上与常规短轮询相同,而长轮询仅在请求和响应的时间上有所不同(这样服务器显然处于控制之中).