问题标签 [long-polling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
27683 浏览

rest - 什么是监视 REST 资源以进行更改的 RESTful 方式?

如果有一个 REST 资源我想监视来自其他客户端的更改或修改,那么最好(也是最 RESTful)的方法是什么?

我这样做的一个想法是通过提供特定资源来保持连接打开,而不是在资源不(尚)存在时立即返回。例如,给定资源:

对此资源的“GET”可能会告诉我轮到我的对手移动了。与其不断轮询此资源以找出轮到我移动的时间,我可能会记下移动编号(例如 5)并尝试检索下一步:

在“正常”REST 模型中,对此 URL 的 GET 请求似乎会返回 404(未找到)错误。但是,如果相反,服务器保持连接打开,直到我的对手下棋,即:

然后服务器可以返回我的对手放入该资源的内容。这既可以为我提供我需要的数据,也可以为我的对手何时移动而不需要轮询提供一种通知。

这种方案是 RESTful 的吗?还是它违反了某种 REST 原则?

0 投票
6 回答
6781 浏览

gwt - 长轮询与流式传输约 1 次更新/秒

流媒体是一个可行的选择吗?根据我的选择,服务器端是否会有性能差异?在这种情况下,一个比另一个更好吗?

我正在开发一个在服务器端运行 Tomcat 的 GWT 应用程序。为了理解我的需求,想象一下同时更新几只股票的股价。

0 投票
3 回答
1660 浏览

wcf - WCF 轮询双工服务是否可供其他客户端使用?

我正在使用 silverlight 客户端编写服务器应用程序。在某些时候,我希望非 Silverlight 客户能够使用我的服务。现在我已经编写了一些 WCF 服务,这些服务会被轮询,但我对响应能力并不满意。我正在考虑将代码切换到使用 Silverlight/WCF 双工轮询,但如果我这样做,我是否会坚持使用 Silverlight 作为我唯一的客户端?使用普通的 WCF http 服务编写我自己的长轮询服务会更好吗?

0 投票
3 回答
3381 浏览

comet - 为多人 JavaScript 游戏实现后端服务器的最简单方法?(彗星/长轮询)

我一直在用 JavaScript 编写一个游戏,现在是时候让它成为多人游戏了。我想使用 AJAX 长轮询来获取当前的游戏状态,以及实现大厅。

服务器只需要执行基本功能,例如将游戏状态存储在 mysql 数据库中、检索游戏状态以及格式化记分板。

我认为用 PHP 编写它是最简单的,但由于它会产生大量的 apache 进程,这将是一个坏主意。

你有什么建议吗?我正在寻找最直接的方法。

编辑:StreamHub 看起来不错,但社区版只允许 10 个并发用户。

0 投票
3 回答
1105 浏览

http - 在 HTTP 中保持同时连接?

我需要维护到 Web 服务器的多个活动的长池 AJAX 连接。

我知道大多数浏览器不允许超过 2 个同时连接到同一台服务器。这就是HTTP 1.1 协议规定的内容:

使用持久连接的客户端应该限制他们维护到给定服务器的同时连接的数量。单用户客户端不应与任何服务器或代理保持超过 2 个连接。一个代理应该使用最多 2*N 个连接到另一个服务器或代理,其中 N 是同时活跃的用户数。这些指南旨在改善 HTTP 响应时间并避免拥塞。

假设我有 2 个子域 Server1.MyWebSite.Com 和 Server2.MyWebSite.Com共享相同的 IP 地址,我可以同时进行 2x2 连接吗?

0 投票
2 回答
1383 浏览

javascript - Comet、responseText 和内存使用情况

有没有办法在不破坏 XHR 对象的情况下清除 XHR 对象的 responseText?

我需要保持对 Web 服务器的持久连接,以便将实时数据提供给浏览器。问题是,有相对大量的数据通过(每秒几百K),所以内存使用是一个大问题,因为这个连接必须保持打开至少几分钟。responseText 很快就变得非常大,即使我发回的 JSON 已经被压缩到尽可能小。

由于服务器端应用程序的工作方式,如果我使用 AJAX 样式的短轮询并在完成后销毁 XHR 对象,即使在解析数据所需的几毫秒内,我也会错过大量重要数据响应,创建一个新的 XHR 并将其发送出去。我没有使用重叠请求的选项,因为 Web 服务器一次只接受一个连接。(不要问。)所以 Comet 正是我需要的模型。

我想做的是解析从服务器返回的每个 JSON 块,然后清除 responseText 以便我可以继续使用相同的连接。但是,responseText 是只读的。它不能通过我找到的任何方法直接清空。

我在这里缺少图片的一部分吗?有谁知道我读完后可以用来释放 responseText 的任何技巧?还是服务器响应可以去其他地方?

我不包括代码,因为这实际上几乎是一个与代码无关的问题。生成 XHR 并处理返回数据的 Javascript 例程非常非常简单。

0 投票
1 回答
1910 浏览

erlang - Erlang(彗星聊天)中的消息队列模型?

我正在与 Erlang 进行 Comet 聊天。我只使用一个连接(长轮询)进行消息传输。但是,如您所知,长轮询连接不能一直保持连接。每次有新消息到达或达到超时时间时,它都会中断,然后再次连接到服务器。如果在连接重新连接之前发送了一条消息,那么保持聊天的完整性就会出现问题。

此外,如果用户使用 Comet-chat 打开多个窗口,则所有聊天消息必须保持同步,这意味着用户可以拥有大量长轮询连接。所以很难保证每条消息都按时送达。

我应该为每个连接建立一个消息队列吗?或者还有什么更好的方法来解决这个问题?

0 投票
2 回答
2959 浏览

http - 在响应浏览器之前我可以等待的安全时间量是多少,而不会出现超时?

我正在制作一个与长轮询一起使用的聊天应用程序,以模拟从服务器到客户端的“推送”。

基本上,浏览器会要求更新,如果有新内容我会回复。否则,我会保持连接打开而不响应,直到有东西要发回。

现在,如果 30 秒过去了,我还没有发送任何东西,那么我会发送一个响应,基本上是“NoNews”,客户端将再次轮询。

我想要做的显然是在浏览器超时并放弃我之前尽可能长时间地保持这种连接而不回复......我还没有找到关于每个浏览器的客户端超时是什么的好文档,而且似乎对所有人来说都不一样...

你们中有人提出过长轮询申请吗?
任何想法最长的安全超时可能是什么?

谢谢!

0 投票
1 回答
21132 浏览

jquery - 如何在 ASP.NET MVC 中进行长轮询 AJAX 请求?

有谁知道如何在 ASP.NET MVC 中编写长轮询 AJAX 请求(用于服务器推送通知)?每当我这样做时,似乎只有最后一个打开窗口的浏览器才会收到通知。好像 IIS/ASP.NET 正在取消最后一个请求,因为它被挂起或其他什么。

0 投票
1 回答
390 浏览

python - 帮助 python 分叉子服务器进行 ajax 推送、长轮询

好吧,我只知道一些基本的python,但如果我能得到帮助,那么我正在考虑将它开源。

我正在尝试做的事情:-(完成)Ajax 发送初始化内容-Python 服务器 recv 命令“init”发送最新内容-(完成)Ajax recv 内容,然后立即回调到 python 服务器-Python 服务器 recv 命令“等待”,设置孩子,并等待来自 ajax 的命令“新” - (完成)Ajax 发送“新”命令 - Python 服务器唤醒所有等待的孩子并发送最新内容 - (完成)Ajax 发送“等待”,等等向前

我已经用 php 编写了 Python 服务器部分,但它使用 100% CPU,所以我知道我必须使用分叉套接字守护程序才能让多个进程坐在那里等待。现在,我可以用 PHP 编写它,但它需要手动安装的扩展,这可能是要求主机将其安装在共享帐户等上的问题。所以我转向 Python,它也可以提供更多的灵活性并运行得更快。再加上更多的人可以使用它。

所以,如果有人可以帮助解决这个问题,或者给出一些指导,那就太好了。

我自己正在编写代码,只是不太了解它。我可以为不同的命令添加 if 语句,并自己添加 mysql 连接。如果我最终有任何问题,我会在这里问。我喜欢这个网站。