同时打开超过 3 个选项卡时,Yaws 进程变慢

Yaws process slows down when opened more than 3 simultaneous tabs

我有一个基于 Erlang 的 gen_server 的 Comet 应用程序,它在与不同的浏览器一起使用时运行良好,但是当我使用同一浏览器打开一个页面的多个选项卡时,调用 .yaws 文件需要一个在完成时,如果有超过 6 个选项卡,它甚至不会在关闭一半选项卡之前传递消息,尽管其他浏览器运行正常并且 来自其他浏览器的几乎是即时交付。

进一步解释

应用程序太复杂,无法在此处添加诊断,Comet/long 轮询必须延迟 .yaws 文件的执行但是如何???它一定与雅司会话有关,这些是我所做的测试...我在 Opera、Chrome、Firefox 及其隐身模式上打开了 6 个选项卡,并以 6 个不同的用户身份登录,并且运行良好我认为 gen_server 表现正常。现在我关闭所有浏览器并重新打开一个浏览器及其隐身模式,当我从浏览器 B 向 A 发送消息时,当我在浏览器 A 上打开 3 个选项卡并在浏览器 B 上打开一个选项卡(这是浏览器 A 的隐身模式)时,所有选项卡都会收到消息正如预期的那样,但是当我从浏览器 A 向 B 发送消息时,当我打开 6 个或更多选项卡时需要一段时间,即使在 10 分钟后消息也不会发送,因为长轮询通常执行其任务我认为这是以某种方式导致问题。

更新

几天来我一直在努力解决这个问题,最后我在雅司病的例子中发现了同样的问题。

只需在 7 个或更多选项卡上打开下面的 link,然后查看最后打开的选项卡

=> http://yaws.hyber.org/server_sent_events.html

您会注意到服务器没有按预期响应,这与我在 long_polling

中遇到的问题完全相同

我该如何克服这个问题?

这不是 Yaws 的问题,而是浏览器对单个 IP 地址的服务器发送事件 (SSE) 连接数量的限制。一些浏览器允许您配置更高的限制,而另一些则不允许,这意味着如果您需要使用 SSE 或长轮询,您几乎会受制于这些限制,并且必须设计一种方法让您的应用程序在其中工作他们。

您可以考虑使用 websocket instead, as ,这样它们就不会受到同样严格的限制。