当打开超过3个同时标签时,雅司进程减慢

时间:2016-09-29 14:55:57

标签: erlang yaws

我有一个基于Erlang的gen_server的彗星应用程序,当它与不同的浏览器一起使用时效果很好但是当我使用相同的浏览器打开一个页面的多个选项卡时,调用.yaws文件需要一段时间才能完成,有更多除了6个选项卡之外,它甚至不会传递消息,直到关闭一半选项卡,尽管其他浏览器正常运行  从其他浏览器几乎立即发布。

进一步解释

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

更新

我一直试图弄清楚这个问题好几天,最后我在雅司病例子中发现了同样的问题。

只需在7个或更多标签上打开下面的链接,然后查看最后打开的标签

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

您会注意到服务器没有按预期响应,这与我使用long_polling时遇到的问题完全相同

我如何克服这个问题?

1 个答案:

答案 0 :(得分:2)

这不是Yaws的问题,而是浏览器对可以拥有的单个IP地址的服务器发送事件(SSE)连接数的限制。有些浏览器允许你配置更高的限制,有些则不允许,这意味着如果你需要使用SSE或长轮询,你几乎要坚持这些限制,并且必须设计一种方法让你的应用程序在它们。

您可以考虑使用websocket代替browsers handle those connections differently,因此它们不会受到相同的严格限制。