我不明白,如果XMLHttpRequest无法访问部分内容,那么长轮询如何才能有用?
在客户端或服务器上等待的位置没有区别。只有在完成后才能显示响应。因此,短轮询和长轮询看起来都是相同的。
例如,如果我正在编写聊天应用程序,我可以发送正常动态服务或Comet服务的GET请求 - 结果相同,因为我无法获得内容直到完成响应。
我的错误在哪里?
更新1。
所以“彗星”概念的唯一意义就是servlet(例如)应该在回答尝试永不说“没有数据”之前尽可能多地等待?
那么Tomcat API中存在CometProcessor这样的接口是什么?
答案 0 :(得分:2)
每当有新的聊天行进入时,服务器就会完成长轮询请求,并且客户端会发出一个新的聊天请求。因此,每次部件进入时,都会通过重新发出请求来模拟对部分内容的支持。
答案 1 :(得分:1)
长轮询的目的是模拟服务器将数据推送到客户端的过程。使其成为仿真的是服务器保持来自客户端的请求,以便服务器决定何时响应,即。看来服务器控制数据传输实际上并非完全。它实际上并不是在正确意义上推送数据,因此长轮询只是对基于推送的传输的仿真。
一旦客户端收到响应,它会立即发出另一个请求,以便服务器始终控制向下发送数据。
答案 2 :(得分:0)
使用长轮询,服务器执行“等待”,减少要设置的HTTP连接数。您从客户端启动一个轮询,然后服务器根据需要拉伸响应,直到它实际返回数据。因此,您不必为客户端一次又一次地启动HTTP请求负担。
答案 3 :(得分:0)
使用长轮询,服务器只要有一些数据就会返回完整响应 (然后,正如其他答案所说,客户端发出另一个请求)
因此,这种技术比定期短轮询更快,客户端可能会在服务器可用后的某个时间请求数据。
HTH