Каков самый современный метод установления нескольких одноранговых соединений с использованием WebRTC?

Вот моя текущая проблема: я просматривал несколько ресурсов WebRTC, просматривал эксперименты Google, а также эксперименты с Mozilla, но мне еще только предстоит найти простое объяснение, как это сделать. У меня также возникают проблемы с пониманием базовой архитектуры WebRTC.

Я хотел бы создать одноранговое наложение, в котором каждый узел является браузером. Каждый из этих узлов будет принимать все входящие соединения и сможет подключаться к другим, используя свой IP-адрес. Они будут общаться только через канал данных. В отличие от многих примеров, которые я читал, я не хотел бы полагаться на какой-либо сервер для сигнализации, только на те, которые необходимы для подрыва NAT (например, серверы STUN).

Кто-нибудь может объяснить, как этого можно достичь? Я читал ресурсы на сайте экспериментов WebRTC, и мне нужно что-то делать с предложениями или чем-то, но я не совсем понимаю.

1 ответ

Решение

То, как вы обращаетесь к узлам в WebRTC, полностью зависит от вас, разработчика, потому что сигнализация - намеренно - исключена из спецификации. Поэтому, если вы хотите обратиться к узлам в оверлее по их IP-адресам, продолжайте. Но я думаю, что вы немного неправильно поняли, как работает установление соединения в WebRTC, поэтому позвольте мне углубиться немного глубже:

Установление соединения WebRTC осуществляется путем обмена сообщениями SDP ( http://en.wikipedia.org/wiki/Session_Description_Protocol). Если вы хотите, чтобы один браузер установил PeerConnection с другим браузером, вам нужно будет найти способ отправки сообщения SDP (сгенерированного через RTCPeerConnection#createOffer) в другой браузер. Невозможно просто открыть UDP-соединение с этим браузером (иначе ICE не будет работать).

Поэтому для присоединения узла к оверлейной сети вам потребуется центральная точка (назовем это сервером) или другой канал (посмотрите на https://github.com/cjb/serverless-webrtc/ для "server-"). меньше " WebRTC) для установления соединения. Как только все ваши узлы соединены друг с другом через RTCPeerConnections (например, в виде цепочки), вы можете использовать эти соединения для дальнейшего установления соединения (т.е. передачи предложений / ответов SDP через эти соединения).

Возвращаясь к адресации узлов по IP-адресу: это не очень хорошая идея, потому что иногда вы даже не знаете адрес (например, когда в игру вступают STUN и особенно TURN).

Изменить, чтобы ответить на вопрос в комментарии:

Вместо IP-адреса вы можете использовать sth. как UUID ( http://en.wikipedia.org/wiki/UUID). Кроме того, вы могли бы также использовать sth. например, адрес электронной почты пользователя, если все ваши пользователи каким-либо образом аутентифицированы. Но имейте в виду, что вопрос аутентификации одноранговых узлов еще не полностью определен IETF/W3C, и реализации пока не существует.

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