socketcluster передает клиента от одного работника другому

Я довольно плохо знаком с сокеткластером и сокетами в целом. Поэтому я использовал пример терминального чата с https://github.com/devonJS/socket-cluster-chat/

Я хотел бы масштабировать его до 2 рабочих вместо одного, в частности, я хотел бы иметь второго рабочего в качестве резервного. Поэтому, если умирает первый работник, я хочу, чтобы все клиенты подключились к резервному работнику. Должна быть возможность сделать это правильно?

Я немного поиграл с этим, но не могу понять это правильно. Я был бы очень признателен за указатель в правильном направлении. Я знаю, что есть другие решения, такие как forever или nginx, но я хочу реализовать это сам, потому что думаю, только тогда я понял это. Я не публиковал код, потому что это совсем немного, но я могу отредактировать его в случае необходимости. Снова любые указатели будут оценены. ура

1 ответ

Решение

Передача экземпляров между процессами не поддерживается в Node.js, и в большинстве случаев это будет анти-шаблон.

В SocketCluster каждый клиентский сокет подключается к одному рабочему в любой момент времени, и если у вас есть несколько рабочих, клиентский сокет не может выбрать, к какому конкретному рабочему он будет подключен; по умолчанию SC автоматически распределяет клиентов с помощью алгоритма циклического перебора модуля кластера Node.js. Это функция безопасности для предотвращения частичных DDoS-атак (вы не хотите, чтобы злонамеренный клиент предназначался для определенных сотрудников и DoS - вы должны заставить их равномерно распределяться по ядрам рабочих / процессоров).

Как правило, для целей резервного копирования лучше всего запускать второй экземпляр SC на другом хосте.

Вы можете запустить второй экземпляр SC на том же хосте на другом порту, но вы должны знать, что запуск двух экземпляров SC на одном хосте не защитит вас от сбоя хоста или сети.

Обратите внимание, что фатальные (неперехваченные) ошибки в SC могут привести к сбою работника, но если предположить, что базовый хост все еще работает и все еще подключен к Интернету, то работник снова появится почти мгновенно. Хороший способ избежать ненужных сбоев рабочих - убедиться, что вы правильно фиксируете и обрабатываете исключения в коде (без утечки памяти).

Другие вопросы по тегам