标签: comet

如果没有客户端交互,GMail Chat如何能够发出AJAX请求?

所有HTTP响应都要求客户端启动它们,甚至是使用AJAX创建的响应.但是,GMail的聊天功能可以接收来自其他用户的消息,即使我只是坐在舒适的电脑椅上观看但没有与浏览器交互.他们是如何做到的呢?

ajax gmail chat comet

59
推荐指数
3
解决办法
1万
查看次数

Django/Comet(推):所有邪恶中最少的?

我已经阅读了关于Django和HTTP Push的所有问题和答案.然而,没有一个提供关于如何实现所谓"彗星"功能的基本"hello world"的清晰,简洁,开端到终端的解决方案.

第一个问题(1):HTTP在多大程度上没有(至少到目前为止)为此做出的问题?所有潜在的解决方案基本上都是黑客吗?

2)目前最好的解决方案是什么?

  • 绕行?
  • 其他一些基于Twisted的解决方案?
  • 龙卷风?
  • Node.js的?
  • XMPP w/BOSH?

其他解决方案?

3)nginx推送模块如何参与此讨论?

4)这些解决方案中哪一个需要替换典型的mod_wsgi/nginx(或apache)部署模型?他们为什么要这个?在任何情况下这都是有利的转变吗?

5)使用已经在Python中的解决方案的优势有多重要?

来自PyCon 2010的Alex Gaynor的演讲,我刚刚在blip.tv上观看过,它非常精彩且内容丰富,但对Django中HTTP Push的当前状态并不十分具体.他说的一件事给了我一些信心:Orbited在抽象和模拟网络套接字的概念方面做得很好.因此,当WebSockets实际着陆时,我们将处于转型的好地方.

6)HTML5 Websockets与当前解决方案有何不同?Gaynor对从Orbited过渡的难易程度的评估是否准确?

django comet

53
推荐指数
3
解决办法
1万
查看次数

请求之前的HTTP响应

我的问题可能听起来很愚蠢,但我只是想确定一下:

  • 是否可以在请求该资源之前发送HTTP响应?

比如说你有一个HTML页面index.html,只显示一个名为的图片img.jpg.现在,如果您的服务器知道访问者每次都会请求HTML文件然后请求jpg图像:

服务器是否可以在HTML文件之后发送图像以节省时间?

我知道HTTP是一种同步协议,所以理论上它不应该工作,但我只是想让某人确认(或不是).

networking tcp comet http

51
推荐指数
2
解决办法
3886
查看次数

Servlet-3异步上下文,如何进行异步写操作?

问题描述

Servlet-3.0 API允许分离请求/响应上下文并在以后回复它.

但是,如果我尝试编写大量数据,例如:

AsyncContext ac = getWaitingContext() ;
ServletOutputStream out = ac.getResponse().getOutputStream();
out.print(some_big_data);
out.flush()
Run Code Online (Sandbox Code Playgroud)

对于Tomcat 7和Jetty 8,它实际上可能会阻塞 - 并且它确实阻塞了琐碎的测试用例.教程建议创建一个可以处理这种设置的线程池 - 这通常是对传统10K架构的反作用.

但是,如果我有10,000个打开的连接和一个让我们说10个线程的线程池,那么即使1%的具有低速连接或仅阻塞连接的客户端阻塞线程池并完全阻止彗星响应或减慢其速度也足够了显著.

预期的做法是获得"写就绪"通知或I/O完成通知,而不是继续推送数据.

如何使用Servlet-3.0 API完成,即如何获得:

  • I/O操作的异步完成通知.
  • 通过写入就绪通知获取非阻塞I/O.

如果Servlet-3.0 API不支持,那么是否有任何特定于Web Server的API(如Jetty Continuation或Tomcat CometEvent)允许真正异步处理此类事件而无需使用线程池伪造异步I/O.

有人知道吗?

如果这不可能,您可以参考文档确认吗?

示例代码中的问题演示

我附上了模拟事件流的代码.

笔记:

  • 它使用ServletOutputStream该抛出IOException来检测断开连接的客户端
  • 它发送keep-alive消息以确保客户端仍在那里
  • 我创建了一个线程池来"模拟"异步操作.

在这样的例子中,我明确定义了大小为1的线程池来显示问题:

  • 启动一个应用程序
  • 从两个终端运行curl http://localhost:8080/path/to/app(两次)
  • 现在发送数据 curd -d m=message http://localhost:8080/path/to/app
  • 两个客户都收到了数据
  • 现在暂停其中一个客户端(Ctrl + Z)并再次发送消息 curd -d m=message http://localhost:8080/path/to/app
  • 观察到另一个非挂起的客户端没有收到任何信息,或者在传输消息后停止接收保持活动请求,因为其他线程被阻止.

我想在不使用线程池的情况下解决这样的问题,因为使用1000-5000个开放连接,我可以非常快地耗尽线程池.

下面的示例代码.


import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import …
Run Code Online (Sandbox Code Playgroud)

java comet servlet-3.0

50
推荐指数
2
解决办法
3万
查看次数

如何使用Comet with Spring MVC?

我想在一个简单的Web应用程序中添加一些Comet /服务器推送功能.我无法找到有关如何执行此操作的最新信息.

有人能指出我使用Comet with Spring MVC的一些示例,教程,博客或最近的任何内容吗?

如果它很重要,我使用Freemarker来渲染视图,使用JQuery来构建JavaScript框架.

旁白:我已经了解了Lift及其内置的强大Comet支持.这个应用程序是我已经使用Lift实现的概念证明.现在我用Spring MVC构建它来进行比较和对比.

编辑:我已经开始尝试DWR了.这不是太棒了,但我能做出有用的东西.我也检查了Atmosphere,但我根本无法获得任何牵引力.

我要打开这个问题了.希望会有更好的建议.

java jquery comet dwr spring-mvc

42
推荐指数
1
解决办法
1万
查看次数

哪些特定用例通过WebSockets和长轮询调用BOSH?

BOSH是......

一种传输协议,通过有效地使用多个同步HTTP请求/响应对来模拟两个实体(例如客户端和服务器)之间的长期双向TCP连接的语义,而无需使用频繁的轮询或分块响应.

这听起来像WebSockets和HTTP长轮询,除了它使用两个开放的HTTP连接而不是一个,并且不扩展HTTP协议.

两个协议之间有什么区别,哪个用例更喜欢WebSockets而不是BOSH?

comet http websocket

40
推荐指数
1
解决办法
2万
查看次数

使用php和jquery的简单彗星示例

任何人都可以给我一个使用PHP的彗星技术的简单例子吗?

我只需要一个使用持久HTTP连接或类似的示例.我不想使用轮询技术,因为我有这样的设置,不仅难以使用和管理它的大量资源.我也使用IIS7而不是Apache.

一个很好的例子真的很有用,所以我可以从这种丑陋的轮询技术中继续前进.

php iis comet http keep-alive

34
推荐指数
3
解决办法
5万
查看次数

加载comet/server push iframe时停止浏览器"thomber of doom"

使用Comet或Ajax Long Pull技术时 - 通常使用iframe.虽然iframe正在等待关闭的长连接,但浏览器正在旋转它的悸动(进度/加载指示器).

一些网站,例如etherpad.com,设法让它停止.

他们是如何做到的呢?

ajax comet loading progress throbber

33
推荐指数
1
解决办法
1万
查看次数

WCF服务器如何通知WCF客户端有关更改?(更好的解决方案然后简单的轮询,例如Comet或长轮询)

另见" WCF通过防火墙推送到客户端 "

我需要一个连接到WCF服务器的WCF客户端,然后当服务器上的某些数据发生变化时,客户端需要更新其显示.

因为客户端和服务器之间可能存在防火墙.

  • 所有通信都必须通过HTTP
  • 服务器无法对客户端进行(物理)传出呼叫.

当我写客户端和服务器时,我不需要将解决方案限制为仅使用肥皂等.


我正在寻找" 长期投票 "/" 彗星 "等的内置支持


感谢Drew Marsh提供的关于如何在WCF中实现长轮询的最丰富的答案.但是我认为WCF的主要"卖点"是你可以通过配置在配置文件中使用的通道来做这种事情. 例如,我想要一个逻辑上只有两个但只是物理传入的频道.

.net wcf design-patterns comet long-polling

32
推荐指数
1
解决办法
1万
查看次数

HTML 5 Websockets将取代Comet?

看起来HTML 5中的Websockets将成为服务器推送的新标准.

这是否意味着服务器推送被称为Comet的黑客将被淘汰?

当所有主流浏览器中的Websockets即将推出(1 - 2年)时,我是否有理由学习如何实现彗星?

然后我可以使用BeaconpushPusher直到那时为止?

html comet server-push websocket

32
推荐指数
2
解决办法
8811
查看次数