Есть ли у Firefox максимальное количество EventSource, которое он может поддерживать? - PullRequest
0 голосов
/ 19 мая 2018

В настоящее время я разрабатываю простую веб-панель управления с использованием класса com.sun.net.httpserver.HttpServer.В этой панели я могу создать определенное количество EventSource на странице мониторинга.

Используя это, я заметил, что после всего лишь 6 параллельных EventSource мой браузер перестает «подписываться» на них.Чтобы доказать это, я разработал простой игрушечный пример.Вы можете найти его в следующем репозитории github: https://github.com/wellsaid/SimpleSSEHTTPServer

Как вы можете видеть на этом снимке экрана , последние два ресурса остаются в ожидании, а первые шесть начинают получать обновления.

Вывод моей программы:

[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,сервер отвечает правильно: скриншот

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

В соответствии с этим: Макс. Число параллельных HTTP-подключений в браузере?

Существует максимальное ограничение HTTP-соединения между клиентом и парой серверов в зависимости от браузера.

Учитывая характер моего приложения, я переключился на другую модель: использовал один EventSource для каждого клиента.Затем я отправляю данные в следующем формате:

data: ключ: значение \ n \ n

0 голосов
/ 20 мая 2018

Имеет ли система, в которой размещен сервер, шесть ядер?Из небольшого исследования и изучения вашего кода я вижу, что вы зарегистрировали 8 контекстов и 8 EventSource.EventSource установит постоянное соединение с сервером.Соединение остается открытым до закрытия, вызывая EventSource.close (), который в данный момент вызывается только в случае возврата ошибки с сервера.Каждый источник событий будет обслуживаться новым потоком (обработчиками в вашем коде), из которого вы создали новый поток, который будет находиться в спящем режиме в течение некоторого времени, но, как я полагаю, исходный поток будет продолжать ждать завершения нового потока.Пока этот поток ожидает (в течение короткого времени), остальные EventSources уже выполнены и занимают поток (/ core).Ко времени инициализации 7-го EventSource 6 потоков HttpHandler уже работают, и Исполнитель не может принимать больше запросов, поэтому я предполагаю, что произошел сбой.Можете ли вы попробовать дать некоторый разрыв между созданием EventSource и явным вызовом EventSource.close () в обработчике onMessage ().

...