Мой основной рабочий инструмент это python. Встала задача реализовать общение клиента (js) и сервера посредством сокетов. Боюсь, что торнадо (питоновский асинхронный фреймворк) будет жрать слишком много ресурсов (да я знаю о зле преждевременной оптимизации, но хотелось бы в этом вопросе не прогадать с инструментами).
Смотрел в сторону go и node.js, но ничего не смог нагуглить по производительности в адекватных оценках. Что-нибудь наподобие "сервер с 512 мб, двумя ядрами будет держать 1000 hello world одновременных коннектов".
Подскажите, пожалуйста, в какую сторону смотреть? Какой язык, какой сервер?
UPD Добавил кейс использования
Предполагаемый кейс использования: два человека подключаются сокетами к серверу, для них создается общая "игра". Происходит общение между ними, не очень интенсивное. Примерное время жизни одной "игры" одна минута, от каждого игрока будет по 10 сообщений в коннект. Какой инструмент позволит масштабировать этот кейс с меньшими усилиями разработчика?
Go производительнее python и node.js, это не секрет. Но и разработка на нём будет чуть сложнее. Конкретные цифры вы получите только на этапе стресс тестирования. Можете хотя бы тот же hello world сделать и посмотрите сколько одновременных подключений выдержит ваш компьютер.
есть разница между "держать 1000 соединений" и "обслуживать 1000 соединений".
Между tornado и node.js с архитектурной точки зрения разница не большая - и там и там event loop, и то и то работает в один поток и может использовать только одно ядро. Потому обычно запускают по демону на ядро и разруливают все через реверс прокси (nginx, haproxy). У go - горутины которые используют весь CPU.
На простом ping-pong сервере разница будет не столь заметна между этими технологиями. Все от задачи зависит и архитектуры приложения. В целом могу предположить что в том же ping-pong у go будет явное преимущество в плане потребления памяти и только.
Предполагаемый кейс использования: два человека подключаются сокетами к серверу, для них создается общая игра. Происходит общение между ними, не очень интенсивное. Примерное время жизни одной "игры" одна минута, от каждого игрока будет по 10 сообщений в сокет.
Nihisil: ну тогда я бы больше о конфигурации системы беспокоился. Скажем в лимит по хэндлерам на процесс (по умолчанию вроде как не больше 1024-ех дисприторов один процесс может держать) ну и т.д. А так разницы особо нет. Ну и да, если вас парит производительность - напишите нагрузочные тесты.
Сергей Протько: У вас случайно нет ссылок на статьи или книги по этому вопросу? Я пытался что-то найти но как-то все безуспешно. Меня больше парит что я толком даже не знаю как лучше работать с сокетами и самое главное как конфигурировать сервера под них, а не производительность. Поэтому я сейчас в стадии поиска информации