На чём писать UDP-сервер под VPS: Java vs Node.js?
Есть VPS 1024мб, 2 ядра по 2ГГц. Не знаю на чём писать UDP-сервер. Выбор пал на Java, либо Node.js. Принимаемый поток сообщений пойдёт от C# (Unity, UDP) примерно 50-100 сообщений в секунду (в пиках), "сообщение" ~ 200байт.
Что лучше справится с такой нагрузкой и такими не сильно выдающимися ресурсами? Конечно, хотелось бы более производительный сервер получить :)
Спасибо за идею. Не рассматривал даже. А почему GoLang? :) Он будет сильно производительнее Java и Node.js, насколько понимаю? А если тогда рассматривать Rust и сам уж C++?
Я просто с Golang и Rust вообще дела не имел, поэтому для меня нет разницы что изучать новое :) На C++ программировал уже лет 10, но не сетевые технологии. Но на С++ я не рискую сейчас базировать сервер, покуда он как тестовый пишется, хочется как-то удержать баланс между: чтобы не слишком геморно было кодить и вроде как нагрузку бы держало, чтобы отдалило необходимость переписывания сервера на С++ как можно подальше :)
SEOVirus, по производительности он будет почти как Java, при этом менее требователен к ресурсам и очень прост в освоении и кодинге - особенно по сравнению с той же Java (про C++ вообще молчу)
Golang называют C++ 21 века :)
Если цель с языками поиграться, то можно и go, и rust, и erlang и все что угодно. А если цель - решить проблему и чтобы сервер работал, выше вам уже Сергей Горностаев дал правильный ответ.
Совершенно правильный совет насчёт Go. Он на порядок менее требовательный к памяти. Надёжная работа Java на гигабайте - дело сомнительное. Node - работать будет, но тут уже зависит от специфики приложения.
SEOVirus, с чего бы компилируемому решению с поддержкой многопоточности, не быть шустрее чем интерпретируемое, однопоточное?
Моя мысль основная в том, что для первой реализации стоит использовать то что лучше знаешь. Быстро запилил прототип, потестировал. Не взлетает: искать альтернативу.
А по ресурсам:
У C# лучше с типизацией, в то время как NodeJs умеет только в динамическую. По памяти C# должен быть экономнее.
C# - компилируется, NodeJs - интерпретируется виртуальной машиной (с оговорками). У первого варианта больше возможностей по оптимизации. NodeJs проектировался для выполнения в одном потоке. По CPU C# потенциально должен быть эффективнее.
PS: рассуждаю как сторонний наблюдатель, очки на стройке нашёл.
SEOVirus, да, без году неделя. Вопрос требований к стабильности вашего предложения.
Я так понимаю, поддержка до сих пор сугубо экспериментальная, и вопрос что будет с обратной совместимостью открытый.