gpt4 book ai didi

javascript - Angular 2 : http - actual long polling

转载 作者:行者123 更新时间:2023-11-30 11:34:35 28 4
gpt4 key购买 nike

我有一个第 3 方服务要实现,该服务提供带有长轮询的 RESTful API...他们正在为实时事件提供服务,并且尽快显示它是至关重要的。

遗憾的是,该服务不提供推送通知,因此我们需要处理我们所拥有的....

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

应该很简单....

但到目前为止,我在 Angular 的文档中找不到任何关于长轮询的内容……我唯一找到的是与 rxJS 相关的轮询……所以设置一个间隔来确定我查询 API 的频率…… (在我的例子中是每 30 秒一次)......但是关于保持 channel 打开并监听变化......

找到这个线程: How to implement http long polling in Angular 2

但它不是在谈论这个问题。

我不想每秒都查询 API。

有什么想法吗?

我考虑过实现 signalR(这在这里可能没有多大帮助),但它依赖于 jQuery...除非 100% 必要,否则我不想将其添加到包中!

最佳答案

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

enter image description here

如果你想保持连接,你需要使用 webSoket。WebSockets 在客户端和服务器之间提供持久连接,双方都可以使用该连接随时开始发送数据。客户端通过称为 WebSocket 握手的过程建立 WebSocket 连接。此过程从客户端向服务器发送常规 HTTP 请求开始

enter image description here

但是我从你的问题中不明白为什么你不能在长拉完成后发送另一个获取请求,比如:

myLongPullingFunc(){
this.http.get(longPullingURL)
.subscribe(res=>{
if(sholdFetchData){
useFetchedData(res);
this.myLongPullingFunc();
}else
doSomethingElse()
})
}

您可以阅读更多关于长拉的信息 here在 webSokects 上 here

关于javascript - Angular 2 : http - actual long polling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45009845/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com