(C++) Игровой сервер, (Flash) Клиент

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

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

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

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

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

Обновлять:

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

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
5 039
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Хотя он в первую очередь написан для 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 убедитесь, что на вашем сервере есть файл политики безопасности. в противном случае вы не сможете открыть сокет. Ознакомьтесь с этим ТАК вопрос для получения дополнительной информации.

Другие вопросы по теме