javascript - XHR 持久连接,怎么回事?

标签 javascript xmlhttprequest comet

我刚刚在阅读 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/

相关文章:

javascript - 如何使 th 的宽度等于另一个 bootstrap-table 中的每个对应的 th

javascript - 如何在外部 javascript 文件中使用 onclick

javascript - 如何将 input(type = text ) 从 html 表单传递到 javascript 函数

javascript - 如何将 xmlhttprequest 存储到变量中

php - 简单的Python房间聊天服务器

javascript - 使用 Javascript 设置用户控件内下拉菜单的值

javascript - 在 xhr.responseText 中使用 getElementsByName 获取纯文本

xml - 经典 asp 中的 System.Net.HttpWebRequest?

php - 使用 JS 或 PHP 进行 cometd 编程

python - 仅使用标准库的 Python 中的基本 cometd