问题标签 [comet]

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 投票
2 回答
15980 浏览

javascript - “HTTP Streaming”(推送)AJAX 模式的跨浏览器实现

客户端从服务器请求网页。然后 Clent 要求进行额外的计算;服务器执行一系列计算并在部分结果可用时立即发送(文本格式,每行包含单独的完整项目)。客户端使用服务器提供的信息更新网页(使用 JavaScript 和 DOM)。

这似乎符合Ajaxpatterns 站点的HTTP 流当前版本)模式。

问题是如何以跨浏览器(与浏览器无关)的方式进行,最好不使用 JavaScript 框架,或使用一些轻量级框架,如 jQuery。

问题始于以跨浏览器方式生成 XMLHttpRequest ,但我认为主要问题是并非所有浏览器都onreadystatechangeXMLHttpRequest正确实现;并非所有浏览器onreadystatechange都会在每个服务器刷新时调用事件(顺便说一句。如何从 CGI 脚本(在 Perl 中)强制服务器刷新?)。Ajaxpatterns 上的示例代码通过使用计时器来处理这个问题;如果我检测到部分响应,我应该放弃计时器解决方案onreadystatechange吗?


添加于 2009 年 8 月 11 日

当前解决方案:
我使用以下函数创建 XMLHttpRequest 对象:

如果我要使用一些(最好是轻量级的)JavaScript 框架,如 jQuery,如果用户选择不安装 jQuery,我希望有备用。

我使用以下代码启动 AJAX;setInterval之所以使用,是因为某些浏览器onreadystatechange仅在服务器关闭连接后调用(可能需要长达数十秒),而不是在服务器刷新数据时(大约每秒或更频繁)。

handleResponse功能是最复杂的功能,但它的草图如下所示。可以做得更好吗?如何使用一些轻量级的 JavaScript 框架(如 jQuery)来完成?

0 投票
5 回答
5763 浏览

iphone - 使用 NSURLConnection 进行长轮询

我正在开发一个 iPhone 应用程序,它将使用长轮询通过 HTTP 将事件通知从服务器发送到客户端。在服务器上打开连接后,我将发送一小段表示事件的 JSON,因为它们发生了。我发现-[NSURLConnectionDelegate connection:didReceiveData]直到我关闭连接后才会调用它,无论我在创建NSURLRequest. 我已经验证服务器端正在按预期工作 - 第一个 JSON 事件将立即发送,后续事件将在发生时通过线路发送。有没有办法在NSURLConnection这些事件发生时接收它们,还是我需要改为下拉到 CFSocket API?

我开始着手集成 CocoaAsyncSocket,但NSURLConnection如果可能的话,我更愿意继续使用,因为它更适合我基于 REST/JSON 的 Web 服务结构的其余部分。

0 投票
4 回答
7219 浏览

java - Java Servlets:为什么 PrintWriter.flush() 不刷新?

我目前正在编写一个 Comet 应用程序,它要求我在持久连接上一次发送大量数据。但是,在关闭连接之前,我无法将消息刷新到客户端。是否有任何原因 PrintWriter.flush() 方法的行为不像我认为的那样?

这是我的 Tomcat Comet 实现:

所以在这里我试图发送消息“BEGIN!” 并在之后保持连接打开,以便我可以发送更多数据。但是,似乎在连接关闭之前消息不会通过。

这是我的 ajax 代码: $.post('comet', function(data) { alert(data); });

运行此代码后,Firebug 告诉我这是响应标头: Server: Apache-Coyote/1.1 Transfer-Encoding: chunked Date: Mon, 13 Jul 2009 21:16:29 GMT

这让我认为我的浏览器收到了一些数据,但是如何在连接关闭之前更新页面上的内容?

0 投票
3 回答
957 浏览

php - 如何避免彗星聊天中的死消息?

我正在用 Erlang 和 PHP 进行 Comet 聊天。但是现在我想我遇到了一个问题:轮询连接会在大约一定时间后自动断开并重新连接(我设置为10秒),所以会有一段时间用户没有连接到聊天服务器。如果此时用户发送消息,则该消息将是死的(没有人可以收到它)。

在客户端代码中,我使用带有 jsonp 的 jquery 来实现轮询连接。有什么好的方法可以解决这个问题吗?

先谢谢了~

0 投票
3 回答
1660 浏览

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

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

0 投票
1 回答
1253 浏览

ajax - 如何从网页调用此 Comets 应用程序

我已经实现了http://tomcat.apache.org/tomcat-6.0-doc/aio.html中显示的两个类,它提供了一个使用 Tomcat 彗星实现的信使应用程序。

如何将其连接到 Web 界面并显示某些内容。

我认为这些是基本步骤(我不知道细节)。

  1. 我应该创建一些传统事件 - 按钮单击或 AJAX 事件 - 调用 ChatServlet 并传入 CometEvent(以某种方式) - 也许 BEGIN
  2. 从那时起,每次我想使用 READ 事件作为输入参数向客户端发送一些东西时,我都会让我的代码调用事件方法。

我复制了以下两个类:




0 投票
7 回答
13927 浏览

nginx - 彗星的nginx代理

我需要一些 linux 大师的帮助。我正在开发一个包含彗星服务器的网络应用程序。Comet 服务器在 localhost:8080 上运行,并公开 url localhost:8080/long_polling 供客户端连接。我的 webapp 在 localhost:80 上运行。

我使用 nginx 将请求从 nginx 代理到彗星服务器(localhost:80/long_polling 代理到 localhost:8080/long_polling),但是,我对这个解决方案有两个不满:

  1. nginx 在一分钟后给我一个 504 网关超时,即使我将每个超时设置更改为 600 秒
  2. 我真的不希望 nginx 必须代理到彗星服务器 - nginx 代理不是为持久连接(可能长达半小时)而构建的。我宁愿让客户端直接连接彗星服务器,让彗星服务器处理。

所以我的问题是:是否有任何 linux 技巧可以让我在不使用 nginx 代理的情况下将 localhost:8080/long_polling 暴露给 localhost:80/long_polling?一定有什么。这就是为什么我认为这个问题可能最好由 linux 大师来回答。

我需要 /long_polling 在端口 80 上公开的原因是我可以使用 AJAX 连接到它(ajax same-origin-policy)。

这是我的 nginx proxy.conf 供参考:

0 投票
0 回答
1972 浏览

java - Tomcat Comets 应用程序返回 .jsp 页面而不是天气数据

我已经在http://www.ibm.com/developerworks/web/library/wa-cometjava/#N100CC实现了 Comets 教程

似乎我正在使用 Comets 技术从服务器返回数据 - 即被推送到浏览器。但是,我得到了用于触发 Comet 事件返回的 .jsp 页面,而不是应该返回的天气数据。

我已经粘贴了下面的代码。基本上有一个 servlet、一个 jsp 页面和一个将它们联系在一起的 web.xml 文件。

我已经命名了我的 Web 应用程序 - WeatherServlet,并且 tomcat 正在端口 8080 上运行。

0 投票
3 回答
5957 浏览

php - Comet & PHP:如何在 PHP 聊天系统中使用 Comet?

我必须使用 Comet 在 PHP 中构建一个简单的聊天系统。

我不知道这个项目的最佳方法是什么。

什么是最好的技术(跨浏览器会很好),以及如何实现它?我可以使用哪些已经支持彗星的库。我不想使用巴约协议

我已经为聊天系统运行了一个 PHP 后端,但我需要一些关于客户端和服务器之间交互的想法。

谢谢大家。致以我的问候。

0 投票
1 回答
12244 浏览

ajax - 不同浏览器的超时行为?

我正在编写一个基于 AJAX/COMET 的在线聊天室。我的设计是:

要求

----------------- 等待 -------------> 发送转储数据

----------------- 等待 -------------> 发送转储数据

----------------- 等待 -------------> 发送转储数据

----------------- 等待 -------------> 发送转储数据

----------------- 等待 -------------> 发送转储数据

------ 发生了什么事,得到回应。

另一个请求…………

如您所见,服务器持有请求并等待发生某些事情,如果发生了某些事件,只需推送数据并完成请求。然后客户端将发出另一个请求。请求中有tick,所以如果两个请求之间有事件发生,服务器就知道客户端有挂起的事件。

在浏览器超时之前,服务器也会发送一些空闲数据来防止客户端超时。

现在,问题来了:不同浏览器的超时行为是什么?我知道浏览器发送请求并等待数据,如果等待时间过长,它将超时。但是不同浏览器的超时行为是什么?是否有任何标题可以控制浏览器的超时行为?通过了解浏览器的超时行为,我可以决定如何处理它们。我在哪里可以找到这些数据?