Модуль кластеризации nodejs решает одну конкретную проблему c. Когда у вас есть http-сервер, и вы хотите распределить нагрузку входящих соединений между несколькими процессами, это то, что делает модуль кластеризации nodejs. Это не то, что у вас есть. У вас есть несколько исходящих подключений webSocket на стороне клиента, и вы, очевидно, хотите применить несколько процессов для обработки входящих данных. Это полностью отличается от того, что делает кластерный модуль nodejs.
Во-первых, важно понимать, что получение данных не является ресурсоемким процессом для nodejs. Фактическая обработка сокетов и получение входящих данных на компьютер обрабатывается ОС и находится за пределами процесса nodejs.
Так что, если вам действительно требуется более одного ЦП для работы с этим, это должно быть обрабатывать входящие данные, а не просто получать их.
Существует несколько различных способов структурирования.
У вас может быть один центральный процесс, содержащий все webSockets, а также количество рабочих процессов или рабочих потоков, в которые вы передаете входящие данные для обработки. Это применило бы много ЦП к обработке данных и позволило бы распределить обработку нагрузки между ЦП независимо от того, в какой сокет поступили данные.
Вы можете создать 4 отдельных дочерних элемента. процессы и каждый дочерний процесс создает одно из четырех соединений webSocket, а затем каждый дочерний процесс обрабатывает только входящие данные для своего webSocket. Недостатком этого метода является то, что он применяет только один процесс к каждому webSocket, и если большая часть данных поступает в один webSocket, другие процессы будут в основном простаивать.
Если один webSocket имеет намного больше нагрузки, чем другие, и по какой-то причине вариант # 1 не будет работать хорошо, тогда вы можете объединить # 1 и # 2. Создайте отдельный процесс для каждого webSocket, а затем создайте несколько рабочих потоков для обработки входящих данных для каждого из них. Создайте рабочую очередь, в которую вставляются входящие данные, и работу можно отправлять каждому рабочему потоку, когда он завершает свой предыдущий фрагмент данных.