Передача JSON между браузерами с помощью WebRTC

Я был взволнован перспективой WebRTC, когда впервые услышал об этом. Это звучало как веб-сокеты, но без сервера. К сожалению, все учебные пособия, которые мне удалось найти, подчеркивали видео- и аудиоаспекты WebRTC. Я ничего не могу найти об отправке текста/данных/JSON между браузерами. Не могли бы вы помочь мне написать что-то вроде простого hello world, просто отправив некоторые данные из одного браузера в другой с помощью WebbRTC?


person Matt    schedule 18.04.2012    source источник


Ответы (7)


Это удар в темноту, но в последнем проекте редакторов веб-API есть интерфейс DataChannel как часть API одноранговых данных.

Однако текущий рабочий проект не имеет этого API, поэтому, возможно, это очень новый и еще не реализованный.

person Francis Avila    schedule 18.04.2012
comment
Я видел сообщение в блоге, в котором говорилось, что WebRTC уже может отправлять данные, но он был сосредоточен на видеочате. Звучало так, будто отправка данных уже доступна, но я не смог найти, как это реализовано. - person Matt; 19.04.2012
comment
Что отличает API данных Peer to Ppeer от PeerConnection? Похоже, или, по крайней мере, в примере, приведенном в черновике от 18 апреля, оба могут отправлять сообщения без сервера. - person Matt; 19.04.2012
comment
PeerConnection — это уровень подключения, и его нельзя использовать напрямую для отправки данных. Когда у вас есть PeerConnection, вы присоединяете к нему MediaStreams, который предоставляет данные для отправки или получения. Потоки, кажется, односторонние. Но Data API добавляет к PeerConnection новый метод, который возвращает двунаправленный DataChannel, который может как отправлять, так и получать произвольные данные. MediaStreams так не строят. - person Francis Avila; 19.04.2012
comment
Одностороннее, как в том, что вы можете настроить только принимающее или отправляющее соединение, но не оба? - person Matt; 19.04.2012
comment
Мэтт, ты, кажется, запутался. Вы можете открыть соединение (например, дорогу, по которой могут перемещаться данные, которые являются двунаправленными), и вы можете отправлять данные, соответствующие интерфейсу MediaStream (однонаправленные, многодорожечные данные, такие как аудио или видео), но вы не можете произвольно объединять байты и отправлять их, а также отправлять данные туда и обратно по одному и тому же каналу (не соединение: канал) без интерфейса DataChannel. - person Francis Avila; 19.04.2012
comment
спасибо, что помогли мне прояснить это, мне придется подождать несколько месяцев, пока браузеры реализуют эти API, но я в восторге от возможностей к тому времени, когда они это сделают - person Matt; 19.04.2012

DataChannel теперь реализован в Firefox (18+) и Chrome (25+), хотя это еще только начало.

Дополнительные сведения см. в статье HTML5 Rocks Начало работы с WebRTC.

person Sam Dutton    schedule 11.01.2013
comment
Является DataChannel в Google Chrome в соответствии со спецификацией. Потому что здесь написано, что SCTP находится на рассмотрении. Тогда он использует UDP или TCP? - person usercode; 02.03.2013
comment
В настоящее время Chrome предлагает только ненадежные (UDP) каналы передачи данных, ожидается поддержка SCTP. Firefox предлагает как ненадежные (UDP), так и надежные (TCP). - person cjb; 18.03.2013

Эта функциональность еще не реализована ни в одной поставляемой реализации WebRTC. Как указывали другие авторы, теперь в последнем черновике редакторов WebRTC есть DataChannel API, но протокол для этого все еще находится в разработке. Ожидайте увидеть этот API в Chrome и Firefox позже в этом году.

person Justin Uberti    schedule 19.04.2012
comment
Итак, вы можете установить соединение между браузерами, но пока не можете отправлять данные? - person Matt; 19.04.2012
comment
Вы можете отправлять только MediaStreams, то есть данные, но не произвольные данные, созданные приложением, что вы и хотите сделать. Кроме того, приложение ничего не может отправить в ответ — оно может отправить только свои собственные MediaStreams, не связанные с теми, которые вы отправляете. - person Francis Avila; 19.04.2012

Это старый вопрос, но поскольку я начал изучать webRTC, я попытаюсь ответить на него.

Прежде всего, некоторое заблуждение:

Это звучало как веб-сокеты, но без сервера

Невозможно передать ЛЮБЫЕ данные между одноранговыми узлами WebRTC до того, как некоторая информация (управление мультимедийными сеансами, конфигурация сети/мультимедийные возможности узлов) не будет должным образом обменена и согласована. Для этого вам понадобится сервер и сигнализация (которая не является частью webRTC: вы можете реализовать его так, как хотите).

Когда сигнализация завершена, вам нужно создать RTCPeerConnection с чем-то вроде этого :

if (navigator.webkitGetUserMedia) {
   RTCPeerConnection = webkitRTCPeerConnection;
} else if(navigator.mozGetUserMedia){
   RTCPeerConnection = mozRTCPeerConnection;
   RTCSessionDescription = mozRTCSessionDescription;
   RTCIceCandidate = mozRTCIceCandidate;
}

а потом:

var connection = new RTCPeerConnection(servers);

После этого вы можете добавить свой канал данных к этому PeerConnection:

var dataChannel = connection.createDataChannel("channelName",{ reliable: true });

Когда это будет сделано, вы можете просто вызвать sendChannel.send('Any data you want');, и это отправит любые данные, которые вы хотите.

Во всяком случае, я нашел эту книгу действительно полезной. Он оставляет много вопросов без ответов, но для первого старта хорош.

person Salvador Dali    schedule 09.06.2014

Я полагаю, Мэтт уже знает, но для гостей Google: да, вы можете, используя DataChannels.

На твоей стороне:

channel = somePeerConnection.createDataChannel("a Label");
channel.onopen = function() { channel.send("any thing") };

На другой стороне:

somePeerConnection.ondatachannel = function (evt) {
   evt.channel.onmessage = function (evt) {
       alert( evt.data );
   };
};

См. эти примеры:

person Aurium    schedule 10.01.2013
comment
вторая ссылка, которую вы разместили, - 404 - person Matt; 11.01.2013

http://peerjs.com/ развивается и предоставляет синтаксис, подобный веб-сокету, для передачи данных p2p между экземплярами браузера.

person cggaurav    schedule 24.03.2013

Как указал Джастин, протокол и API все еще дорабатываются; на последней конференции IETF я представил проект второстепенного протокола под JS API. Окончательная форма, скорее всего, будет очень близка к текущему предложению в черновике редактора, но вам, вероятно, также придется подождать «onopened» от принимающей стороны.

API смоделирован на API-интерфейсе WebSocket, чтобы упростить перенос кода из реализации WebSocket в DataChannels, хотя не все элементы в WebSocket переносятся (например, URL-адрес), и, очевидно, DataChannel добавляет ряд возможностей, отсутствующих в WebSockets, связанных с ненадежными или частично достоверные данные.

person jesup    schedule 19.04.2012
comment
У меня есть механизм WebSockets, работающий на моем веб-сайте, и хотя он лучше, чем AJAX, я подумал, что было бы действительно здорово (не говоря уже о бесконечно лучшем для моего сервера, мне не нужно было передавать так много данных), чтобы WebRTC сократил мой затраты на простой хостинг сайта и базы данных, и ничего более. - person Matt; 21.04.2012