Технически, вам не нужно слушать отдельные порты для каждой комнаты.Это возможно, поскольку ОС поддерживает родительский и дочерний процессы, использующие один и тот же дескриптор сокета (файла).Для этого можно использовать модуль узла WebWorker .Благодаря этой архитектуре вы автоматически получаете модуль балансировки нагрузки, который может распределять входящие соединения между различными дочерними процессами с помощью планировщика процессов ОС.
Однако в вашей системе самое сложное - это обмен общими данными междуэти процессы, потому что они имеют свои собственные пространства памяти.К счастью, есть несколько способов поделиться этими данными (онлайн-сессии, комнаты, таблица результатов ...), но они могут быть довольно сложными.Один из способов - позволить дочерним процессам взаимодействовать с мастером через IPC (сокет), а другой способ - использовать область общей памяти (база данных, memcached ...), к которой каждый может получить доступ на лету.
Я бы порекомендовал вам сначала построить свою систему, используя архитектуру процессов с одним узлом (если вы собираетесь использовать websocket, вы уже можете обрабатывать довольно большое количество одновременных подключений), затем, когда вам нужно расширить систему, используйте архитектуру web-работника.Более того, миграция не займет много времени, если вы уже используете общее место для хранения / извлечения данных (база данных, memcached, redis keystore ...).