Я хотел бы получить несколько советов о моем проекте. В настоящее время я занимаюсь разработкой музыкального приложения / игры на C ++ / Qt с многопользовательским режимом, и у меня есть следующие требования (в идеале):
Что бы вы порекомендовали сделать это?
Я думал об использовании протокола xmpp, чтобы я мог подключиться к google / jabber и получить контакты, пообщаться с ними. На самом деле эта часть работает, но тогда я не знаю, как отправлять / получать данные в реальном времени. Что касается части реального времени, я думал об использовании прямой связи TCP, но мне нужно знать внешний ip своих контактов, и я не знаю, как это сделать. Я думал о том, чтобы автоматически отправлять мой внешний порт ip и tcp всем моим контактам каждый раз, когда я подключаюсь, но я не нашел решения для извлечения внешнего ip из кода. Так что я немного застрял. Любой совет?
Есть ли альтернативные решения? альтернативные протоколы?
Спасибо вам,
Laurent
Вам будет очень трудно избежать написания сервера по реалистичным, практическим и производительным причинам:
Многие жилые интернет-соединения находятся за брандмауэрами (на уровне интернет-провайдера, локального маршрутизатора или ОС), которые ограничивают прием соединений извне сети. NAT также усложняет прием соединений из Интернета по локальной сети.
Существует несколько драгоценных методов интернет-коммуникации, которые не используют сервер, и те, которые используют локальное обнаружение пиров для поиска пиров. Большая часть трафика LPD не попадет из вашей локальной сети, интернет-провайдер отфильтрует его (в противном случае вы сможете «локально» обнаруживать пиров во всем Интернете).
Пропускная способность может быть проблемой для игр. Не у всех пока есть высокоскоростное интернет-соединение (хотя проникновение оптоволоконной оптики и быстрых DSL на рынок довольно велико), и вы столкнетесь с проблемами при подключении более медленных хостов к большому скоплению.
Серверы поддерживают сети типа звезды, которые очень эффективны. Существуют и другие топологии сети, но многие страдают недостатками, которые сильно ограничивают их способность к масштабированию.
Звездные сети, например, для клиентов, требуют 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 в качестве основы вашего многопользовательского протокола, ожидайте, что у вас будет собственный сервер.
Других решений пока нет …