Советы по написанию клиент-серверной игры - PullRequest
4 голосов
/ 07 января 2011

Я думаю о написании игры, основанной на сервере, к которой подключаются несколько клиентских программ.Игра (очень) в основном состоит из списка элементов, которые пользователь может «принять», что позволит удалить его из списка на всех подключенных компьютерах (это нужно обновить очень быстро).

Я думаюоб использовании Java-апплета для клиента, поскольку я хотел бы, чтобы он был переносимым и запускался из браузера (в основном в Windows), а также быстро обновлялся, а также на сервере C ++ или Java, работающем в Linux (в настоящее время это просто домашний сервер,но возможно пойти на VPS).

Предыдущее «воплощение» этой игры запускалось в браузере и использовало PHP + mySQL для бэкэнда, но это немного затопило сервер, когда несколько человек подключились (это было около 8 человек, это в конечном итоге должно было бы обрабатывать гораздо больше).
Пользователи, вероятно, будут находиться в одном физическом месте (с тем же публичным IP-адресом), и система будет получать несколько запросов в секундуВсе это потребует отправки списка обратно клиентам.

Некоторые компьютеры могут иметь ограничения брандмауэрана них, поэтому вы бы порекомендовали использовать HTTP-трафик, пользовательский порт или, возможно, через SSH или какой-либо существующий протокол?

Может кто-нибудь предложить некоторые советы (многопоточность, несколько запросов одного элемента?), инструменты, базы данных (mySQL?) или API, которые помогут мне начать работу над этим проектом?Я бы предпочел C ++ для бэкэнда, так как он был бы быстрее, но использование Java позволило бы мне повторно использовать код.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 07 января 2011

Я бы не использовал C ++ только из-за скорости. Маловероятно, что разница в производительности будет иметь реальное значение для вашей игры. (Ваша сеть, вероятно, будет скрывать любые различия в производительности, если у вас нет 10 GigE между клиентом и сервером). Я бы использовал C ++ или Java, потому что вы сначала включите его, используя этот язык.

2 голосов
/ 07 января 2011

Для тех, кто ищет хороший сетевой API для c ++, я всегда советую Boost.Asio . Его преимущество заключается в том, что он не зависит от платформы, поэтому вы можете скомпилировать сервер для Linux, Windows и т. Д. Однако, если вы не слишком знакомы с шаблонами c ++ / boost, код может быть немного сложным. Посмотрите, попробуйте.

С точки зрения общего совета. Учитывая приведенное выше описание, вам нужен относительно простой сервер. Я бы посоветовал держать его очень простым, однопоточным циклом опроса. Прочитайте сообщение от подключенных клиентов (подождите несколько сокетов) и ответьте соответствующим образом. Это устраняет любую проблему, связанную с множественным доступом к вашему списку, и другими проблемами синхронизации.

Я мог бы также предложить, прежде чем переписать свое первоначальное воплощение. Попробуйте улучшить его, как вы заявили:

и система будет получать несколько запросов в секунду, и все это потребует отправки списка обратно клиентам.

Учитывая, что каждый запрос удаляет элемент из этого списка, почему бы просто не сообщить вашим пользователям, какой элемент удален, вместо того, чтобы снова и снова отправлять весь список по сети? Если этот список имеет какой-либо значительный размер, это незначительное изменение приведет к значительному улучшению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...