Задать вопрос

Как установить p2p соединение между двумя клиентами, и что для этого нужно?

Что имею:
Есть простенькая игрушка на C+Lua.
Есть Heroku, и умение в node.js
Чего хочется:
Организовать прямое соединение между двумя игроками.
В идеале - один игрок коннектится к моему серверу на ноде, потом коннектится второй игрок, выбирает первого, нода (с помощью сетевой магии) создаёт p2p соединение между двумя игроками и обрывает с ними связь.
Правда, не уверен что это именно так должно работать (почему и пишу тут)
Вопросы:
* Можно ли установить открыть p2p сокеты между двумя пользователями?
* Можно ли это реализовать с помощью сервера на ноде? (всегда рад немного на си пару строк черкануть, если нужно)
* Что еще для этого потребуется?
Хотелось бы получить побольше лит-ры на эту тему, чтоб понять куда смотреть. Я больше по десктопу, и в сетях смыслю на базовом уровне. Так что если есть желание и возможность описать более развёрнутый ответ - буду очень благодарен!
  • Вопрос задан
  • 3433 просмотра
Подписаться 4 Средний Комментировать
Решения вопроса 2
@remzalp
Программер чего попало на чем попало
Начните с изучения работы NAT. Проблема - между участник 1 и участник 2 в памяти их маршрутизаторов нет готовой Nat цепочки, так что маршрутер отбросит попытку соединения.

Задача сводится к пробитию NAT снаружи в автоматическом режиме. Изучайте понятия, связанные с UPnP, NAT, NAT traversal, STUN, TURN
Много головной боли на эту тему было у IP телефонистов, так что многие их рецепты сгодятся и Вам.

Первая попавшаяся статья
https://voipnotes.ru/nat-potocol-turn-rsip-ice/
Ответ написан
Griboks
@Griboks
Для ясности дополню другие ответы.
1. Оба клиента подключаются к серверу.
2. Сервер отдаёт им список всех подключённых клиентов.
3. Один клиент подключается к другому, чей адрес он получил от сервера.

Это не работает, если у клиентов нет белых адресов. Решается проблема следующими способами:
- ретрансляции и соединение клиентов через сервер (стандартное решение для большинства игр)
- подключение к клиентам с белыми адресами
- проброс портов и настройка nat (если вдруг ваша игра умеет ломать сети)
- клиенты долбят я друг к другу через udp
- сервер соединяет концы соединений клиентов (разве какой-то nat это разрешает?)
Короч, надо обойти nat.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы