(C ++) игровой сервер, (Flash) клиент - PullRequest
2 голосов
/ 04 ноября 2008

Я заинтересован в том, чтобы собрать мою первую онлайн-игру с использованием Flash в качестве клиента и написать внутреннее приложение на C ++, в котором сохраняется фактическое состояние игры.

Я делал много игр на C ++ до использования SDL, SFML, Allegro и т. Д. И т. Д., Но никогда не удосужился использовать сетевые библиотеки. Меня просто заинтересовало какое-то полезное направление, для которого библиотеки лучше всего подходят для игровых серверов, где на самом сервере нет графического отображения (или не нужно, но могло бы иметь). Честно говоря, я думаю, что ответ будет любой , и как только я получу навык работы с сокетами, он станет быстрым, посылая данные взад и вперед ... но это не может помочь спросить сначала.

У меня очень мало опыта работы с flash или as3, но мне нравится идея получить доступ к игре через браузер - изучение флэш-памяти, безусловно, будет нелепым, и мне придется преодолеть его, но мой главный интерес снова заключается в любом советы по библиотекам, или источникам, или учебные пособия, которые хороши для отправки / получения данных через сокеты или любым другим способом, который лучше всего работает.

Я читал об аргументах между TCP / UDP, поэтому я не хочу начинать подобную войну здесь; просто общий полезный совет, пожалуйста - я только ищу что-то простое, чтобы заставить меня работать: -p

Как примечание, причина, по которой я выбираю C ++, заключается в том, что игроки на самом деле являются роботами с миниатюрными виртуальными машинами, и все будет работать на сервере, так как количество игроков возрастает, так же как и необходимость эмулировать каждый виртуальный компьютер. : -р

Обновление:

Игровой мир предназначен для игры в реальном времени, но взаимодействие с игроком не обязательно. Основа игры заключается в том, что вы программируете маленьких роботов, которые взаимодействуют в постоянном мире и имеют цели и задачи, которые нужно решать ежедневно / еженедельно, чтобы заработать очки.

Я думал, что буферизация отображаемых данных будет возможна, поскольку игроку не требуется визуализация в реальном времени, поскольку он не имеет прямого контроля над своими роботами. Сервер будет буферизовать примерно 10 секунд данных для каждого соединения, а затем отправлять их за один раз - таким образом, пока данные воспроизводятся на клиенте, сервер занят буферизацией еще немного.

Общие взаимодействия игрока с сервером будут заключаться в загрузке нового кода и получении статистики, также могут быть другие команды отключения для перемещения вашего робота или сброса его в исходное положение. Любое дистанционное управление осуществляется через канал связи и, следовательно, задерживается буфером. Это может быть легко объяснено тем фактом, что постоянный мир где-то похож на Марс (планету), и сигнал занимает некоторое время, чтобы двигаться вперед и назад.

Я планировал создать «лабораторию», в которой вы могли бы настраивать роботов и тестировать их в реальном времени на клиенте, это не имеет ничего общего с реальным игровым миром и, следовательно, не требует никаких сетей - хотя я не не хочу писать виртуальную машину на обоих языках: (

Я полностью чувствую себя комфортно в C ++, и у меня уже есть некоторые рабочие прототипы постоянного мира - я просто новичок, когда дело доходит до сетей, поэтому решил, что лучше сначала получить совет.

Ответы [ 4 ]

2 голосов
/ 04 ноября 2008

Используйте boost :: asio для сетевого программирования

2 голосов
/ 04 ноября 2008

Хотя он в первую очередь написан для C, он все равно отлично подходит для C ++:
Руководство Биджа по сетевому программированию. K
Он охватывает все основы и имеет раздел об изменениях, необходимых для Win32:)
Также я напоминаю, что Flash требовал завершения нулевых байтов для каждого пакета, поэтому вместо send (socket, szData, strlen (szData), 0) используйте send (socket, szData, strlen (szData) +1,0); отправить строку:)

1 голос
/ 25 августа 2009

При использовании классов Flash Socket или XMLSocket убедитесь, что на вашем сервере есть файл политики безопасности. в противном случае вы не сможете открыть сокет. Проверьте этот ТАК вопрос для получения дополнительной информации.

0 голосов
/ 05 ноября 2008

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

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

Возможно, у вас может быть сервер на c # или php или java, в зависимости от вашей платформы, который работает в веб-сервере и обрабатывает запросы и ответы и передает запросы вашему серверу c ++, который может работать независимо на сервере через очередь сообщений или база данных или локальное соединение.

Возможно, и на стороне флэш-памяти, и на стороне сервера таким образом можно решить проблемы с сетью и связью, поскольку c ++ не самый простой язык для организации сетей даже с библиотекой.

Я не знаю, соответствует ли это вашим требованиям для вашей игры или платформы, я просто добавляю это как предложение

...