Angular2:http - 实际长轮询

时间:2017-07-10 10:36:49

标签: javascript angular

我有第三方服务要实施,它提供了长时间轮询的宁静API ......他们正在为现场活动提供服务,并尽快显示它是至关重要的。

可悲的是,该服务不提供推送通知,因此我们需要处理我们拥有的内容....

因此其中一个API具有长轮询功能,因此理论上我的想法是,我查询API,建立一个开放频道30秒并等待更改......(并在FE上发布更改... ...然后超时连接,建立一个新连接并重复该过程。

应该很直接......

但是到目前为止,我在angular的文档中找不到任何关于长轮询的内容......我发现的唯一一件事是与rxJS相关的轮询......所以设置一个关于我查询API的频率的内容...... (在我的情况下,每30秒)......但是没有关于打开频道并听取变化的事情......

发现了这个问题: How to implement http long polling in Angular 2

但它并没有谈论这个问题。

我不想每秒都查询API。

有什么想法吗?

我考虑过实现signalR(在这里可能没什么用处),但它依赖于jQuery ...除非100%是必要的,否则我不想添加到包中!

1 个答案:

答案 0 :(得分:3)

我认为你误解了长拉的概念.. 长时间拉客户端轮询请求新信息的服务器。服务器保持请求打开,直到有新数据可用。一旦可用,服务器响应并发送新信息。当客户端收到新信息时,它会立即发送另一个请求,并重复该操作。这有效地模拟了服务器推送功能。

enter image description here

您希望保持连接活动,您需要使用webSoket。 WebSockets提供客户端和服务器之间的持久连接,双方可以使用它始终开始发送数据。客户端通过称为WebSocket握手的进程建立WebSocket连接。此过程从客户端向服务器发送常规HTTP请求开始

enter image description here

但是我没有从你的问题中理解为什么当长拉完成时你不能发送另一个获取请求,例如:

$master = $degrees->sum('Master');
return $master;

$bachelor = $degrees->sum('Bachelor');
return $bachelor;

$phD = $degrees->sum('PhD');
return $phD;

您可以阅读有关长期拉动here和webSokects here

的更多信息