Производительные вебсокеты?

Добрый день.

Мой основной рабочий инструмент это python. Встала задача реализовать общение клиента (js) и сервера посредством сокетов. Боюсь, что торнадо (питоновский асинхронный фреймворк) будет жрать слишком много ресурсов (да я знаю о зле преждевременной оптимизации, но хотелось бы в этом вопросе не прогадать с инструментами).

Смотрел в сторону go и node.js, но ничего не смог нагуглить по производительности в адекватных оценках. Что-нибудь наподобие "сервер с 512 мб, двумя ядрами будет держать 1000 hello world одновременных коннектов".

Подскажите, пожалуйста, в какую сторону смотреть? Какой язык, какой сервер?

UPD Добавил кейс использования

Предполагаемый кейс использования: два человека подключаются сокетами к серверу, для них создается общая "игра". Происходит общение между ними, не очень интенсивное. Примерное время жизни одной "игры" одна минута, от каждого игрока будет по 10 сообщений в коннект. Какой инструмент позволит масштабировать этот кейс с меньшими усилиями разработчика?
  • Вопрос задан
  • 3051 просмотр
Решения вопроса 1
yttrium
@yttrium
Erlang. Лекий язык. Зеленые потоки размазываются по процессорам из коробки. Есть cowboy с поддержкой web-сокетов
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
обычный нативный сокет с помощью gcc делаете и никаких проблем нет.
раз
два
Ответ написан
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Go производительнее python и node.js, это не секрет. Но и разработка на нём будет чуть сложнее. Конкретные цифры вы получите только на этапе стресс тестирования. Можете хотя бы тот же hello world сделать и посмотрите сколько одновременных подключений выдержит ваш компьютер.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
есть разница между "держать 1000 соединений" и "обслуживать 1000 соединений".

Между tornado и node.js с архитектурной точки зрения разница не большая - и там и там event loop, и то и то работает в один поток и может использовать только одно ядро. Потому обычно запускают по демону на ядро и разруливают все через реверс прокси (nginx, haproxy). У go - горутины которые используют весь CPU.

На простом ping-pong сервере разница будет не столь заметна между этими технологиями. Все от задачи зависит и архитектуры приложения. В целом могу предположить что в том же ping-pong у go будет явное преимущество в плане потребления памяти и только.
Ответ написан
Ваш ответ на вопрос

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

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