Задать вопрос
@a_pussycan
Начинающий веб-программист

Как проксировать websocket не упираясь в пределы tcp?

Задумал написать балансировщик для ws соединений, но понимаю, что упираюсь в ограничение TCP протокола на 65535 (и того меньше) портов на исходящие запросы.
Как быть в данной ситуации? Вижу, что есть ws прокси на nginx, но я скорее для понимания принципов работы
  • Вопрос задан
  • 302 просмотра
Подписаться 2 Простой 7 комментариев
Решения вопроса 1
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Проксируется в целом ровно точно так же, как и любая сетевая нагрузка: клиенты [n] -> балансер -> сервера [m]. Лимит портов в 65к достаточно просто преодолевается путем добавления дополнительных сетевых адаптеров/каналов.
Дополнительные ссылки:
https://unetworkingab.medium.com/millions-of-activ...
https://blog.postman.com/postman-engineering-milli...
https://serverfault.com/questions/725224/how-to-ha...
https://josephmate.github.io/2022-04-14-max-connec...
https://github.com/eranyanay/1m-go-websockets
https://github.com/ramsicandra/1million-ws

Кроме того, WS коннекты можно балансировать как HTTP - банальным редиректом на прямой коннект к серверу. Т.е. клиент коннектится к балансеру, а он ему говорит: "а теперь тебе вот сюда коннектится надо". Или можно совмещать. Пару слов про проксирование WS в nginx: в сети пишут, что nginx с этим плохо справляется под существенной нагрузкой и лучше всего проксировать WS через специализированные прокси типа HAProxy.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Нет никакого ограничения в 65К портов. При трекинге TCP-потоков используется связка "src ip:port - dst ip:port".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы