Как проксировать websocket не упираясь в пределы tcp?
Задумал написать балансировщик для ws соединений, но понимаю, что упираюсь в ограничение TCP протокола на 65535 (и того меньше) портов на исходящие запросы.
Как быть в данной ситуации? Вижу, что есть ws прокси на nginx, но я скорее для понимания принципов работы
Everything_is_bad, мне видится, что прокси должен так работать:
1. Фронт делает запрос на ws к прокси
2. Прокси отвечает нам, что соединение ws установлено
3. Далее, прокси открывает ws соединение с конечной точкой (здесь как раз мы расходуем один tcp порт) и проксирует трафик от фронта в конечную точку
Everything_is_bad, в конце, условно, находятся три ноды по 100к чатов, сбалансированных. Вот и балансер нужен для того, чтобы входящего пользователя проксировать на нужную ноду, где крутится его чат.
Кроме того, WS коннекты можно балансировать как HTTP - банальным редиректом на прямой коннект к серверу. Т.е. клиент коннектится к балансеру, а он ему говорит: "а теперь тебе вот сюда коннектится надо". Или можно совмещать. Пару слов про проксирование WS в nginx: в сети пишут, что nginx с этим плохо справляется под существенной нагрузкой и лучше всего проксировать WS через специализированные прокси типа HAProxy.
Андрей Пушкин, я на уровне протокола реализовываю отдельный метод для редиректа текущего клиента на другой сервер или на балансировщик, в т.ч. на стороне сервера. Просто потому что это все равно нужно, например, для оповещения клиента при отключении или перезагрузке сервера - чтобы не закрывать коннект внезапно, а на стороне клиента не гадать - чего это сервер отрубился?
Андрей Пушкин, вы же можете мультиплексировать сколько угодно входящих соединений в одно исходящее, если воспринимать их не как коннекты, а как поток событий.