Как установить p2p соединение между двумя клиентами, и что для этого нужно?
Что имею:
Есть простенькая игрушка на C+Lua.
Есть Heroku, и умение в node.js
Чего хочется:
Организовать прямое соединение между двумя игроками.
В идеале - один игрок коннектится к моему серверу на ноде, потом коннектится второй игрок, выбирает первого, нода (с помощью сетевой магии) создаёт p2p соединение между двумя игроками и обрывает с ними связь.
Правда, не уверен что это именно так должно работать (почему и пишу тут)
Вопросы:
* Можно ли установить открыть p2p сокеты между двумя пользователями?
* Можно ли это реализовать с помощью сервера на ноде? (всегда рад немного на си пару строк черкануть, если нужно)
* Что еще для этого потребуется?
Хотелось бы получить побольше лит-ры на эту тему, чтоб понять куда смотреть. Я больше по десктопу, и в сетях смыслю на базовом уровне. Так что если есть желание и возможность описать более развёрнутый ответ - буду очень благодарен!
Начните с изучения работы NAT. Проблема - между участник 1 и участник 2 в памяти их маршрутизаторов нет готовой Nat цепочки, так что маршрутер отбросит попытку соединения.
Задача сводится к пробитию NAT снаружи в автоматическом режиме. Изучайте понятия, связанные с UPnP, NAT, NAT traversal, STUN, TURN
Много головной боли на эту тему было у IP телефонистов, так что многие их рецепты сгодятся и Вам.
Для ясности дополню другие ответы.
1. Оба клиента подключаются к серверу.
2. Сервер отдаёт им список всех подключённых клиентов.
3. Один клиент подключается к другому, чей адрес он получил от сервера.
Это не работает, если у клиентов нет белых адресов. Решается проблема следующими способами:
- ретрансляции и соединение клиентов через сервер (стандартное решение для большинства игр)
- подключение к клиентам с белыми адресами
- проброс портов и настройка nat (если вдруг ваша игра умеет ломать сети)
- клиенты долбят я друг к другу через udp
- сервер соединяет концы соединений клиентов (разве какой-то nat это разрешает?)
Короч, надо обойти nat.