CometD 长轮询使用 HTTP 1.1,因此使用持久连接。
从浏览器使用 CometD 时,浏览器管理连接池和 HTTP 协议版本,并且 CometD 不会Connection
在每条消息后添加任何标头来关闭连接:全部留给浏览器,我的经验是长poll 始终保持在同一个连接上。
当使用 CometD Java 客户端库时,同样适用:Jetty 的 HTTP 客户端管理连接池,默认为 HTTP 1.1 并保持连接打开。与浏览器的主要区别在于 Jetty HTTP 客户端允许每个域的连接数超过(通常为 6 个),因此适用于负载测试模拟。查看CometD 性能报告。
更新的 CometD 文档可以在http://docs.cometd.org找到。
说“根据定义,长轮询不使用持久连接而是重新连接”是错误的。HTTP 1.1 完全能够通过同一连接发送多个长轮询,而 CometD 正是这样做的。
我不知道在使用 HTTP 1.1 时,像浏览器这样的客户端会回退到打开/请求/响应/关闭行为的情况,除非应用程序明确要求Connection: close
向 HTTP 请求或响应添加标头(CometD 不这样做)。
使用 WebSocket,CometD 仅打开 1 个持久连接,并且所有消息都通过该连接进行交换,直到应用程序决定通过断开 CometD 客户端来关闭连接。