Задача: написать сервер для игры.
Опыт работы с сетями: C# WebClient запросы.
Первый же "подвопрос" - какой язык выбрать? Т.к. опыта нет - в принципе без разницы, что изучать.
С одной стороны, есть всякие "простые в изучении" NodeJS (фуу, слишком медленно, пиши на C)
С другой стороны, есть "быстрый" C (так он медленный потому, что ты не умеешь на нем писать).
В итоге суть вопроса в том, где баланс времени на изучение и скорости сервера.
Тут второй подвопрос: как оценить "нагрузку" на сервер?
Вот у меня есть класс "Player", в котором 10 int переменных.
Допустим, я хочу 5 раз в секунду передавать положение игрока, а игроков у нас 10.
Правилен ли вывод, что нагрузка на сервер будет составлять 40 * 5 * 10 = 2000 байт/сек?
Это много или мало?
Bloodskys , такие вопросы обычно остаются без решений и вообще являются риторическими, поэтому коммент, а не ответ.
2КБ/сек - это нисколько даже на одного игрока. Точные данные для примера - клиент RO получал около 1МБ трафика в час, т.е. порядка 17КБ в секунду. И это был крайне экономичный протокол. Сейчас есть куда прожорливее примеры.
Для сервера хорошо подходит C#, особенно если умеешь конкурентность и параллелизм. Если знаком с микроядерной архитектурой и архитектурой сервисов/микросервисов, то на C# вполне получится создать горизонтально расширяемый сервер с поддержкой сотен тысяч пользователей в онлайне. Разработка на C# значительно быстрее чем на C/C++, а номинальная надежность кода значительно выше чем в C/C++. Быстродействие достигается горизонтальным расширением и параллелизмом, чего в C# добиться значительно проще чем во все тех же C/C++.
C/C++ - это инструмент для совсем других целей.
Ни на чём. Никакой сервер ты не напишешь, лучше смирись сразу.
Написано
Решения вопроса 1
Saboteur
@saboteur_kiev Куратор тега Разработка игр
software engineer
Не пишите крутой сервер для крутой игры.
Напишите простенькие приложения, например чат, морской бой. Научитесь делать базовые вещи, а потом уже думайте над тем, как стать архитектором с прогнозированием нагрузки.
Не бывает много или мало, бывают конкретные условия, от которых уже и отталкиваются, но реально - оценивать нагрузку, если у вас даже прототипа рабочего нет - как?
Потому я и не спрашивал: "Как написать крутой сервер?", напротив, я, как вы и советуете, хочу научиться. Потому и спросил: "Как оценить нагрузку?". Я могу написать чат и морской бой, а могу не тратить время и спросить "Как оценить?" - и, может быть, мне скажут какую-то панацейную формулу :)
Написано
Saboteur
@saboteur_kiev Куратор тега Разработка игр
Bloodskys: Без практики более простых проектов, у вас будет несколько миллионов вопросов по разным нюансам.
Например ваша фраза
"передавать 10 int для 10 игроков 5 раз в секунду" и ответ 40*5*10=2000 байт/сек
Вы не видите нестыковок в этом примере?
Во-первых откуда такие числа? что такое 5? что такое 40?
Сколько байт у вас int (1,2,4 - зависит от языка и реализации) Предположим что 2 байта
10 игроков * 10 инт * 2 размер инт = 200 байт.
пять раз в секунду это не 200 * 5, это 200 байт каждые 200 миллисекунд. Вы уверены, что такое вообще реалистично в вашей системе? А с ответом назад? А если пинг будет 100, то пакет просто не дойдет?
А передавать нужно на сервер или другим игрокам тоже?
Именно поэтому - пробуйте реализовать более простые, но хотя бы понятные вам вещи на ПРАКТИКЕ, тогда с опытом будете задавать более корректные вопросы.
Идеальные вопросы выглядят так:
"блаблаблаблабла да или нет?", и ответ "да" или "нет" устраивает вас.
"это выглядит как блаблаблаблабла, есть ли такое в природе, как называется" и ответ в виде термина или ссылки на вики вас устраивает.
Написано
Saboteur
@saboteur_kiev Куратор тега Разработка игр
Ну или если не хотите писать чат, а сразу игровой сервер - просто пишите и смотрите на то, что получается и какие проблемы будут уже по ходу. Неважно на каком языке, лишь бы оно вообще заработало хоть в каком-то виде.
Saboteur: int = 4 байта, 40 - "вес" 10 интов, 5 - выбранная мной частота обновления состояния игрока. Хорошо, будь по вашему. Надеюсь, после написания морского боя и чата я пойму, какая связь между "весом" передаваемой информации и нагрузкой на сервер.
Мое мнение, что для сессионки с ограниченным кол-вом игроков бери что хочешь - вон убейсофт не парятся и вообще сервера не делали для некоторых игр (у них птп подключение). 5 раз в секунду отправлять данные - это очень низкая нагрузка на сеть.