Мне интересно собрать свою первую онлайн-игру с использованием Flash в качестве клиента и написать внутреннее приложение на C++, в котором сохраняется фактическое состояние игры.
Я сделал много игр на C++, прежде чем использовать SDL, SFML, Allegro и т. д., Но так и не дошел до использования сетевых библиотек. Меня просто интересовало какое-то полезное направление, в котором библиотеки лучше всего подходят для игровых серверов, на которых фактический сервер не имеет графического дисплея (или не должен, но мог бы иметь). Честно говоря, я думаю, что ответ будет Любые, и как только я разберусь с сокетами, мне станет проще пересылать данные туда и обратно ... но сначала это не поможет.
У меня очень мало опыта работы с flash или as3, но мне нравится идея иметь доступ к игре через браузер - изучение flash, очевидно, будет непростой задачей, которую мне придется преодолеть, но мой главный интерес снова - это любые советы по библиотекам , или источники, или учебные пособия, которые подходят для отправки / получения данных через сокеты или любым другим способом, который лучше всего подходит.
Я читал о спорах между TCP / UDP, поэтому я не хочу здесь начинать подобную войну; просто общий полезный совет, пожалуйста - я ищу только что-то простое, чтобы заставить меня работать :-p
В качестве побочного примечания, причина, по которой я выбираю C++, заключается в том, что игроки на самом деле являются роботами с миниатюрными виртуальными машинами, и все будет работать на сервере, так что количество игроков растет, поэтому возникнет необходимость эмулировать каждый vm :-p
Обновлять:
Игровой мир предназначен для реального времени, но взаимодействие с игроком не обязательно. Основа игры заключается в том, что вы программируете маленьких роботов, которые взаимодействуют в постоянном мире и имеют цели и задачи, которые нужно решать ежедневно / еженедельно, чтобы заработать очки.
Я думал, что буферизация отображаемых данных возможна, поскольку игроку не нужна визуализация в реальном времени, поскольку у них нет прямого контроля над своими роботами. Сервер буферизует 10 секунд или около того данных для каждого соединения, а затем отправляет их за один раз - таким образом, пока данные воспроизводятся на клиенте, сервер занят буферизацией еще немного.
Общее взаимодействие игрока с сервером будет заключаться в загрузке нового кода и получении статистики, также могут быть другие одноразовые команды для перемещения вашего робота или сброса его в исходное положение. Любое дистанционное управление осуществляется через канал связи и, таким образом, задерживается буфером. Это можно легко объяснить тем фактом, что устойчивый мир находится где-то вроде Марса (планеты), и для передачи сигнала вперед и назад требуется время.
Я планировал создать «лабораторию», в которой вы могли бы настраивать роботов и тестировать их в реальном времени на клиенте, это не имеет ничего общего с реальным игровым миром и, следовательно, не требует каких-либо сетей - хотя мне не нравится написание ВМ на обоих языках :(
Мне совершенно комфортно в C++, и у меня уже есть несколько рабочих прототипов постоянного мира - я просто новичок, когда дело доходит до сетей, поэтому решил, что лучше сначала получить совет.





Хотя он в первую очередь написан для C, он по-прежнему отлично подходит для C++:
Руководство Beej по сетевому программированию. K
Он охватывает все основы и имеет раздел об изменениях, необходимых для Win32 :)
Также я припоминаю, что Flash требовалось завершать нулевые байты в каждом пакете, поэтому вместо send (socket, szData, strlen (szData), 0); используйте send (socket, szData, strlen (szData) +1,0); отправить строку :)
Используйте boost :: asio для сетевого программирования
Я не уверен, нужна ли вашей игре связь в реальном времени или достаточно запросов к серверу для загрузки, сохранения и выполнения игр.
Если это так, вам может быть лучше использовать какой-то уровень «промежуточного программного обеспечения» для обработки сетевых частей. Flash с удовольствием создает XML-документы и отправляет их на сервер по HTTP, а затем обрабатывает полученные XML-ответы. в нем много хороших встроенных средств, позволяющих легко справляться со всеми этими вещами.
Возможно, у вас может быть сервер на C#, php или java в зависимости от вашей платформы, которая работает на веб-сервере, обрабатывает запросы и ответы и передает запросы на ваш сервер C++, который может работать независимо на сервере через очередь сообщений, базу данных или локально. связь.
Как на стороне флэш-памяти, так и на стороне сервера может быть проще решить проблемы сети и связи таким образом, поскольку C++ - не самый простой язык для работы в сети даже с библиотекой.
Я не знаю, отвечает ли это вашим требованиям для вашей игры или платформы, я просто добавляю его в качестве предложения
При использовании классов Flash Socket или XMLSocket убедитесь, что на вашем сервере есть файл политики безопасности. в противном случае вы не сможете открыть сокет. Ознакомьтесь с этим ТАК вопрос для получения дополнительной информации.