Как создать многопользовательскую игру с контактами и общением в реальном времени, не создавая сервер?

Я хотел бы получить несколько советов о моем проекте. В настоящее время я занимаюсь разработкой музыкального приложения / игры на C ++ / Qt с многопользовательским режимом, и у меня есть следующие требования (в идеале):

  • Я хочу иметь возможность общаться с друзьями и общаться с ними в чате.
  • Мне нужно отправлять / получать данные в реальном времени для этих контактов (музыкальные заметки)
  • Я не хочу создавать серверное приложение

Что бы вы порекомендовали сделать это?

Я думал об использовании протокола xmpp, чтобы я мог подключиться к google / jabber и получить контакты, пообщаться с ними. На самом деле эта часть работает, но тогда я не знаю, как отправлять / получать данные в реальном времени. Что касается части реального времени, я думал об использовании прямой связи TCP, но мне нужно знать внешний ip своих контактов, и я не знаю, как это сделать. Я думал о том, чтобы автоматически отправлять мой внешний порт ip и tcp всем моим контактам каждый раз, когда я подключаюсь, но я не нашел решения для извлечения внешнего ip из кода. Так что я немного застрял. Любой совет?

Есть ли альтернативные решения? альтернативные протоколы?

Спасибо вам,
Laurent

0

Решение

Вам будет очень трудно избежать написания сервера по реалистичным, практическим и производительным причинам:

  1. Многие жилые интернет-соединения находятся за брандмауэрами (на уровне интернет-провайдера, локального маршрутизатора или ОС), которые ограничивают прием соединений извне сети. NAT также усложняет прием соединений из Интернета по локальной сети.

  2. Существует несколько драгоценных методов интернет-коммуникации, которые не используют сервер, и те, которые используют локальное обнаружение пиров для поиска пиров. Большая часть трафика LPD не попадет из вашей локальной сети, интернет-провайдер отфильтрует его (в противном случае вы сможете «локально» обнаруживать пиров во всем Интернете).

  3. Пропускная способность может быть проблемой для игр. Не у всех пока есть высокоскоростное интернет-соединение (хотя проникновение оптоволоконной оптики и быстрых DSL на рынок довольно велико), и вы столкнетесь с проблемами при подключении более медленных хостов к большому скоплению.

  4. Серверы поддерживают сети типа звезды, которые очень эффективны. Существуют и другие топологии сети, но многие страдают недостатками, которые сильно ограничивают их способность к масштабированию.

    • Звездные сети, например, для клиентов, требуют O (соединений) =
      O (1), O (пропускная способность) = O (1) и O (задержка) = O (1).

    • Полностью подключенные сети требуют подключения каждого клиента
      любой другой клиент, поэтому O (соединения) = O (пропускная способность) = O (n), и
      O (латентность) = O (1).

    • В кольцевых сетях каждый клиент подключается к 2 соседям и сообщениям
      удаленные клиенты перенаправляются. Следовательно, они имеют O (соединений) =
      O (1), но O (пропускная способность) = O (задержка) = O (n).

Если все, что вам нужно, — это система чата или вы хотите, чтобы вы не писали свой собственный сервер, который вы хотите использовать для общения в Интернете через чат-сервер, вы, вероятно, можете полагаться на что-то вроде сервера XMPP.

Если вы решите пойти по этому пути, убедитесь, что надлежащая аутентификация и шифрование используются там, где это необходимо для защиты личных данных пользователя (пароли и т. Д.). Я рекомендую использовать криптографическую схему аутентификации, которая позволяет клиентам аутентифицировать других клиентов (например, схему запроса / ответа или что-то еще). Или вы могли бы связать всю аутентификацию с центральной службой.

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]