Создание игрового сервера MMO. Какой язык мне использовать?
Я планирую разработать стратегическую игру MMORPG для iPhone. Хорошим примером того, что я хочу построить, был бы Мастер Магии, но не пошаговый. Между устройством и сервером не должно быть много данных. Сервер должен обрабатывать: чат (приватный, публичный, альянс) и события. Когда пользователь перемещается по миру, ему также необходимо управлять игроками и позициями замка. Игроки контролируют свои армии, устанавливая пункт назначения, и им потребуется время для перемещения. Например, для перемещения между замками может потребоваться 10 или более минут в зависимости от расстояния. Таким образом, позиции не будут нуждаться в тоннах обновлений каждую минуту. Некоторые люди рекомендуют использовать Python Twisted. Я хочу убедиться, что я создаю его на языке и таким образом, чтобы он мог легко масштабироваться, если бы стал популярной игрой. Поэтому я прошу совета о том, какой язык использовать, есть ли какие-либо уже собранные ресурсы (пример: витая) и какие-либо соображения по поводу того, что он будет распространяться на большое количество пользователей.
2 ответа
Это не тот язык, который поможет вам масштабировать или нет, это системная архитектура. Он должен быть управляемым событиями или асинхронным для обработки количества обновлений, генерируемых игрой в реальном времени, но это само по себе не гарантирует масштабируемости. Поэтому я советую придерживаться того языка, на котором вы лучше всего, и убедиться, что ваша система хорошо спроектирована и оптимизирована.
Сказав это, Twisted - хороший вариант, C/C++ быстры, но, черт побери, это будет тяжелая работа, чтобы написать сервер там. Java может быть очень быстрой с NIO, но у Java есть ограничения, если вы хотите сырую скорость. Erlang может быть удивительно быстрым для серверов, основанных на событиях, но синтаксис немного грубоват.
Не существует такого понятия, как "масштабируемый язык". Существует масштабируемость, которая является свойством того, как вы проектируете свой сервер, и есть языки, которые очень хорошо поддаются этой масштабируемости.
Во-вторых, масштабируемость обычно рассматривается только с точки зрения веб-сайтов, где вам необходим доступ к базе данных. Игры обычно хранят все свои данные в памяти, чтобы сократить время задержки до миллисекунд. Когда вы сохраняете все в памяти, вы не можете по-настоящему масштабировать, потому что держать все синхронизированным было бы огромной болью в заднице на вершине медленного моча
В заключение. не беспокойтесь о "масштабировании на случай, если вы станете популярным", не беспокойтесь о том, чтобы сначала стать популярным Обычно масштабирование - это просто загрузка новых серверов и привязка их к балансировщику нагрузки.
Как ответить на ваш вопрос. Все, что C baced будет работать. Java - хороший выбор из-за его библиотек параллелизма и простых сокетов. Также java темы довольно хороши. C++ - еще один хороший выбор из-за скорости.