Расходы, связанные с сервером, на стороне сервера - программирование
Подтвердить что ты не робот

Расходы, связанные с сервером, на стороне сервера

Если я правильно понимаю принцип Server-Sent Events, каждый раз, когда клиент регистрируется в EventSource, он фактически открывает новое HTTP-соединение с ресурсом, управляющим событием. В отличие от других HTTP-запросов, соединение остается в живых, поэтому серверный процесс/поток, выделенный этому клиенту, продолжает работать до тех пор, пока клиент не отключится.

Что делать, если у нас 1000 клиентов, подключенных к приложению с использованием SSE? Будет ли у нас 1000 процессов/потоков (что-то одно и то же), работающих одновременно, для обработки SSE? Я предполагаю, что ошибаюсь, но если это не так, это действительно более эффективно, чем обычный метод опроса AJAX, где, по крайней мере, серверу не нужно одновременно запускать много процессов/потоков?

4b9b3361

Ответ 1

Да, каждый клиент держит соединение открытым, насколько это возможно. При использовании 1000 одновременных пользователей вы должны открыть 1000 TCP/IP-соединений.

Однако, зависит ли каждое соединение от потока от сервера.

Apache обычно поддерживает поток для каждого подключения, поэтому он довольно дорогостоящий. С Apache лучше всего отключить KeepAlive и использовать опрос.

OTOH с серверами на основе событий, такими как node.js, вы можете иметь только один процесс, который управляет всеми подключениями, поэтому стоимость каждого соединения намного ниже, и вы сможете легко открывать тысячи подключений.

Прохладная вещь SSE заключается в том, что вы можете использовать ее для проведения опроса. Он имеет директиву retry:, которая указывает, как долго клиент должен ждать до повторного подключения (опроса). Просто отправьте это и закройте соединение, если хотите опрос.

Ответ 2

Это зависит от модели потока на сервере. Apache по умолчанию используется один поток (или процесс) для каждого соединения, поэтому даже если потоки не очень много (как ожидается, с помощью SSE), они сидят там, используя ресурсы.

Серверы, такие как Nginx, имеют немного другую модель, каждый поток обрабатывает несколько запросов асинхронно. Такие вещи, как SSE и WebSockets, намного эффективнее.

Apache можно сделать в выполнять больше как Nginx и аналогичные серверы.