【问题标题】:Limit the number of concurrent connections from the server side?限制来自服务器端的并发连接数?
【发布时间】:2009-04-17 19:32:50
【问题描述】:

我正在编写自己的网络服务器,但我还没有正确处理并发连接。由于处理并发连接不当,我得到了大量的页面加载延迟(我响应 SYN,但不知何故丢失了 GET 数据包。浏览器会在一段时间后重试,但需要 3 秒!)我试图弄清楚是否有指示浏览器停止同时加载内容的方法,因为调试这需要很长时间。网络服务器非常精简,不会公开,也不是这个应用程序的主要目的,这就是为什么我愿意以这种方式偷工减料。

最好将并发连接数限制为 1,因为使用 IE 的注册表修改该参数和使用 Firefox 的 about:config 都可以完美运行。

任何其他解决方法的想法也会很有用。我能想到的一对:

1 - 指示浏览器缓存所有内容而不会过期,因此缓慢加载(.js、.css 和图像文件)只发生一次。我可以将校验和附加到文件的末尾 (img src="/img/blah.png?12345678") 以确保如果我更新文件,它会正确重新加载。

2 - 添加 .js 和 .css 以与 .html 文件内联加载 - 但这仍然不能解决图像问题,而且还是很丑陋。

【问题讨论】:

  • 您是否尝试增加收听积压?

标签: browser webserver concurrency connection


【解决方案1】:

我不相信有可能告诉像 Firefox 这样的浏览器不要同时加载,至少不能通过一些 http 标头或其他方式告诉您的用户。

【讨论】:

    【解决方案2】:

    所以我从来没有找到办法做到这一点。

    我的根本问题是有太多的请求进入并溢出我在 emac ram 中的有限接收缓冲区。溢出的接收缓冲区 = 丢弃的数据包。解决方案是将所有 .js 和所有 .css 文件合并为 1 个 .js 和 1 个 .css 文件,以降低我的请求。我将所有图像、js 和 css 页面设置为一年到期。 html 页面设置为立即过期。我编写了一个 perl 脚本来将 md5 校验和附加到文件中,以便重新获取更改的文件。现在效果很好。页面在第一次加载缓存所有内容后立即加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 2016-05-20
      • 2022-08-18
      相关资源
      最近更新 更多