问题标签 [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 投票
1 回答
126 浏览

ajax - 关于分割 AJAX 响应的进一步问题

这个问题与我之前提出的问题有关,请参见此处

作为实现分段 ajax 响应的一种方式,我创建了一个执行此操作的代码:

客户端首先调用初始化进程的脚本。在服务器端,startScript.cgi 代码开始生成数据,并在此过程中将响应分组为块,并将它们写入按顺序索引的单个文件(chunk1.txt、chunk2.txt 等)。在 startScript.cgi 启动此过程后,客户端立即开始第二个 ajax 请求,发送到gatherOutput.cgi,参数为?index=0。

collectOutput.cgi 看到请求,然后在 'chunk'.$index.'.txt' 中查找,然后返回数据。客户端将此输出到 html,然后使用参数 ?index=1 等开始第二个 ajax 请求到gatherOutput.cgi 等。这个过程一直持续到报告来自 startScript.cgi 的所有数据。

如果gatherOutput.cgi 找不到“chunk$index.txt”,它会进入这个循环:

请注意,startScript.cgi 运行的代码可能需要很长时间才能完成,因此重点是在 startScript.cgi 生成新输出时同时广播较旧的输出。

这样做的问题是性能受到影响,尽管很久以前就创建了输出,但输出需要一段时间才能出来。我假设这是由于与 startScript.cgi 中的 CPU 操作相比硬盘访问速度非常慢,因此gatherOutput.cgi 经常等待要写入的新块,或者客户端经常等待gatherOutput.cgi 读取文件等。尽管可能存在其他问题。

有没有人有任何想法或建议来解决这个问题?或者,如果有人对这个问题有不同的方法,那也很好。

顺便说一句,startScript.cgi 可能只被调用一次,它会启动一个大型任务系统任务(带有系统转义符,如 exec、system 或反引号),它会一直运行,并且无法进行分段。

0 投票
1 回答
922 浏览

python - 如何使用 django 在 Python 中编写一个简单的服务器推送实现?

我想使用长池或集成到服务器的彗星编写一个简单的服务器推送实现。
我不想使用像 twisted 这样的网络框架,因为我想了解一切是如何在内部完成的。
我具体应该学什么?
我应该看什么规格?
我更喜欢适合 apache 的东西,所以长池更好,对吧?有没有办法在没有像Stackless Python
这样的外部框架的情况下实现这样的事情?

0 投票
1 回答
415 浏览

php - 这个聊天脚本有效吗?

我使用 php 和 ajax 进行了聊天,并且正在使用 while 循环检查数据库中的新消息。

这是检索消息的代码:

现在这工作正常,php 文件不断检查是否有任何新消息,更新功能在页面加载时启动并等待响应。但它有效吗?如果我要在网站上使用它,恐怕会因为 while 循环而对服务器造成太大压力。有谁知道一种方法,使while循环对服务器更友好?

0 投票
1 回答
1024 浏览

iphone - 当套接字可用时使用 HTTP 长轮询(例如 iPhone、Blackberry)

我目前正在使用服务器上的 Node.js 和 web/iPhone/Blackberry 客户端编写一个简单的跨平台应用程序。带宽和延迟要求类似于您在 IRC“派对游戏”或任何聊天系统中看到的内容。我已经使用 HTTP 长轮询(两种方式都使用 JSON)开发了 Web 客户端。

对于 iPhone/blackberry,我可以使用内置的 HTTP 库与我当前的实现对话,或者我可以在服务器上编写一个套接字侦听器并使用套接字与其对话。这样做有什么好处吗?为什么非浏览器 HTTP 客户端似乎不受欢迎?

0 投票
1 回答
903 浏览

php - Comet 式消息传递:如何在没有轮询的情况下实现服务器部分?

我正在计划一个类似聊天的 Web 应用程序,每当一个用户发布内容时,所有其他用户(即浏览器指向该站点的人)都会得到即时更新。对此的常见选择是使用长轮询 AJAX 请求的彗星式消息传递。用 jQuery 编写客户端部分并不是什么大问题。

但我想知道如何最好地在 PHP 中实现服务器端部分。帖子/消息将存储在 MySQL 中,问题是:在将新帖子写入数据库后,我如何通知所有等待的请求,数据可供他们使用而不使用轮询?轮询会起作用,但它很丑陋并且浪费资源,因此,这是我不想要的:

是否有某种 MySQL 功能可以帮助我?某种IPC会有所帮助吗?服务器运行 Apache。

0 投票
1 回答
900 浏览

jquery - 如何防止 FireFox 因长轮询请求而“旋转”?

我将以下内容用于长轮询请求(这是一个类似于 getJSON 的插件)...

在 30 秒过去或有信息要发送(长轮询)之前,请求不会完成。

问题是 Firefox 是唯一会在底部显示“Waiting for URL...”的浏览器。有什么办法可以防止这种情况发生吗?

0 投票
2 回答
2259 浏览

jquery - 在 Tomcat 服务器上使用 JQuery 进行长轮询的问题

我根据这个例子http://tomcat.apache.org/tomcat-7.0-doc/aio.html创建了一个 CometServlet 。然后我尝试使用 JQuery 从中获取数据。代码如下:

问题是没有触发成功功能(即使我可以在 FireBug 控制台中看到数据来了)。我认为这是因为服务器没有关闭响应编写器,但这是长轮询的目标:)

有没有人有任何想法如何解决?

0 投票
3 回答
5301 浏览

google-app-engine - 在 Google App Engine 中是否可以进行长轮询?

我需要制作需要经常轮询服务器的应用程序,但 GAE 对请求有限制,因此发出大量请求可能会非常昂贵。是否可以使用长轮询并使请求等待最多 30 秒进行更改?

0 投票
4 回答
10074 浏览

php - 简单的PHP长轮询聊天脚本,太简单了?

我正在开发一个简单的聊天应用程序,每个房间可能有 10 到 20 个用户。

查询数据库以获取新消息的脚本对于它将获得的所有请求来说看起来都太简单了。

下面是循环获取新消息的代码块,脚本的其余部分只是获取变量、查询的构造和 json 响应对象:

上面的块将在 10 秒内每秒向数据库查询新消息,如果 10 秒后没有新消息,它将通知浏览器。浏览器等待 5 秒,然后发送另一个请求以获取新消息。

但是,如果脚本找到新消息,浏览器将在收到来自服务器的新消息响应后立即请求更多新消息。

这个过程一直在继续……

那么我该如何进一步优化这个过程呢?这是最好的吗?在我的本地服务器上工作正常,但恐怕只有少数用户可能会使所有请求和循环的实时服务器(共享主机)过载。

这是现场演示,您可以使用 firebug http://pixbush.com/chat/chat.php查看

0 投票
1 回答
1126 浏览

java - Tomcat 7 CometProcessor 上缺少彗星事件

我正在使用 CometProcessor 在 Tomcat 7.0 上实现长轮询。困扰我的是除了 CometEvent.EventType.BEGIN 之外我没有收到任何其他事件。代码示例:

我认为它可能会导致内存泄漏,因为在 BEGIN 事件中我将响应对象存储在本地数组中。

有没有人有任何想法可能是错的?