我刚刚在阅读 FaceBook 是如何设计他们的聊天系统的,上面写着: “并让 iframe 的 JavaScript 通过持久连接发出 HTTP GET 请求,该连接在服务器拥有客户端数据之前不会返回。如果请求被中断或超时,请求将重新建立。这绝不是新技术:它是 Comet 的变体,特别是 XHR 长轮询和/或 BOSH。”
谁能解释一下如何向 Web 服务器发出持久请求?
最佳答案
基本上,您只需将请求保留在服务器上,直到 1) 有可用数据或 2) 服务器达到阈值并说“算了,重新建立,这样我就知道您真的还在那里”。这种方法的困难在于服务器端的可扩展性,因为通常 Web 服务器被设计为尽可能快地执行,并且很难为传入的“长期”请求生成大量线程/进程。
这个长期存在的请求通常是 Xhr(如果在同一域中)或 JSONP(如果跨域)。
我们已经为我们的 IIS/ASP.NET Comet 服务器 ( WebSync ) 编写了一个完整的 Comet 客户端,您可以查看它并可能得到一个想法。浏览 client.js file 的来源(点击 ?debug=true 以查看未压缩版本),您会看到一些对“连接”请求的引用 - 这些是对服务器的长轮询请求,假设没有数据到达,每个请求等待约 25 秒.
关于javascript - XHR 持久连接,怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1837660/