Firefox是否支持最大数量的EventSource?

时间:2018-05-19 19:40:47

标签: javascript java html5 firefox eventsource

我目前正在使用com.sun.net.httpserver.HttpServer类开发一个简单的Web仪表板。在此仪表板中,我可以在监控页面中创建一定数量的EventSource。

通过使用我发现只有6个并行的EventSource后,我的浏览器停止了#34;订阅"给他们。为了证明这一点,我开发了一个简单的玩具示例。您可以在以下github仓库中找到它:https://github.com/wellsaid/SimpleSSEHTTPServer

正如您在此screenshot中所看到的,最后两个资源仍在等待,而前六个资源开始接收更新。

我的程序输出是:

[Main] Creating the server object ...
[Main] Creating server context ...
[Main] Creating SSE contexts ...
[Main] Starting accepting requests!
[HttpRequestHandler] Received request from /0:0:0:0:0:0:0:1:47358: OK!
[Counter-Thread-5] Started
[Counter-Thread-1] Started
[Counter-Thread-3] Started
[Counter-Thread-2] Started
[Counter-Thread-4] Started
[Counter-Thread-6] Started

这表明对资源的要求 counter7'和' counter8'从不由浏览器执行。

最后,当我在firefox调试器上停止服务器时,我可以看到this

这是否意味着浏览器(或服务器)可以从一个客户端处理某种最大数量的EventSource?在这种情况下,我如何增加它们?

更新: 我认为这是浏览器如何管理并发性的问题,因为如果我在资源上执行curl请求' counter7'和' counter8'服务器响应正确:screenshot

2 个答案:

答案 0 :(得分:0)

托管服务器的系统是否有六个内核? 通过一些研究并查看代码,我可以看到您已经注册了8个上下文和8个EventSource。 EventSource将建立与服务器的持久连接。连接保持打开状态,直到通过调用EventSource.close()关闭,当前只有在从服务器返回错误的情况下才调用它。每个eventSource都将由一个新线程(你的代码中的处理程序)提供服务,你创建了一个新的线程,它将睡眠一段时间,但原始线程将继续等待你的新线程完成我想。当这个线程等待(很短的时间)其余的EventSources已经执行并占用一个线程(/ core)。当你的第7个EventSource被初始化时,6个HttpHandler线程已经在服务中并且Executor不能接受更多请求,所以我猜失败了。您是否可以尝试在创建EventSource和在onMessage()处理程序中显式调用EventSource.close()之间留出一些空隙。

答案 1 :(得分:0)

根据这个:Max parallel http connections in a browser?

客户端,服务器对之间的HTTP连接最大限制取决于浏览器。

鉴于我的应用程序的性质,我切换到了不同的模型:为每个客户端使用一个EventSource。然后我按以下格式发送数据:

数据:键:值\ n \ n