Как Сервер отслеживает всех Клиентов, подключенных в сценарии перетаскивания данных в режиме реального времени?
Он не ... он только сохраняетотслеживание клиентов, которые он специально сохраняет.
Этот ответ не относится к node.js.
Скажем, 1000 клиентов подключены к серверу, который в режиме реального времени рассылает цены на акции.Когда на фронте сервера происходит обновление, как сервер узнает все 1000 клиентов, которым необходимо отправить обновление?
Чтобы понять это немного лучше, мы должны рассмотреть большие числа.т. е. предположим, что к услуге подключен 1 миллион клиентов.
Очевидно, что разумный дизайн потребует избыточности, поэтому ни одна служба не будет содержать все 1 миллион подключений (и в случае сбоя одного экземпляра сервера клиенты могут повторноподключиться к другому экземпляру сервера).
В этом случае не существует одного сервера, который бы знал обо всех клиентах.
Для каждого сервера более целесообразно управлять собственной внутренней подпиской / клиентомсписок.Каждый сервер также будет действовать как клиент pub / sub для централизованного сервиса pub / sub (такого как кластер Redis или любой другой).
Если предположить, что 1000 экземпляров сервера, каждый из которых обслуживает 1000 клиентов, мы бы обнаружили, чтоСлужба pub / sub знает только о 1000 «клиентов» (экземпляров сервера).Каждый сервер не знает о других клиентах, он знает только о 1000 клиентах, которыми он управляет.
Если это какой-то цикл, который происходит на стороне сервера, где все данные подключенных клиентов кэшируются и затемобновление будет разослано всем им, не является ли это издержками?
Сам алгоритм зависит от реализации, но в целом каждый сервер будет нести определенные издержки для управления pub /подуровень.
Однако, поскольку каждый сервер управляет только небольшим подмножеством общего количества клиентов, накладные расходы распределяются по ряду систем.
Ориентированный на канал и ориентированный на соединение проект
Вероятно, я должен отметить, что дизайн паба / субабонента не ориентирован на соединение.
Сервер не (не должен) зацикливаться на всех соединениях, спрашивая: «Вы подписаны на этот канал?»"?.
Скорее, дизайн pub / sub предполагает дизайн, ориентированный на" канал ", в котором он находит объект (ы) канала и проходит по циклу.список клиентов.
С одной стороны, этот подход может (или не может) потреблять больше памяти.Поскольку каждый «канал» должен содержать список клиентов, прослушивающих этот канал, один клиентский объект может принадлежать более чем одному списку.
С другой стороны, цикл имеет меньше ветвей кода и имеет меньше накладных расходов.чем дизайн, ориентированный на соединение.Кроме того, этот подход позволяет использовать клиенты pub / sub, которые не связаны с подключением (например, внутренние перехватчики / обратные вызовы).