Я был в восторге от перспективы WebRTC, когда я впервые услышал об этом. Это звучало как websockets, но без сервера. К сожалению, все обучающие материалы, которые я смог найти, подчеркнули видео и аудио аспекты WebRTC. Я не могу ничего найти о передаче текста/данных/JSON между браузерами. Не могли бы вы помочь мне написать простой мир приветствий, просто отправляя некоторые данные из одного браузера в другой с помощью WebbRTC?Передача JSON между браузерами с помощью WebRTC
ответ
Это удар в темноте, но последняя версия редактора веб-API имеет интерфейс DataChannel
как часть Peer-to-Peer Data API.
Однако текущий Working Draft не имеет этого API, так что, возможно, он очень новый и пока еще не реализован.
Эта функциональность еще не реализована в любой реализации WebRTC для доставки. Как отмечали другие плакаты, теперь есть API DataChannel в последнем редакторе редакторов WebRTC, но протокол для этого все еще работает. Ожидайте увидеть этот API в Chrome и Firefox позже в этом году.
. Таким образом, вы можете открыть соединение между браузерами, но вы еще не можете отправлять данные? – Matt
Вы можете отправлять только «MediaStreams», это данные, но не произвольные данные, созданные приложением, и это то, что вы хотите сделать. Кроме того, приложение не может отправить что-либо обратно в ответ - оно может отправлять свои собственные средства MediaStreams, не связанные с отправляемыми вами. –
Как указал Джастин, протокол и API все еще прибиты; на последнем IETF я представил проект для младшего протокола под JS API. Окончательная форма, вероятно, будет очень близка к текущему предложению в черновике редактора, но вам, скорее всего, придется ждать «onopened» с принимающей стороны.
API по образцу WebSocket api упрощает перемещение кода из реализации WebSocket в DataChannels, но не все элементы в WebSocket переносятся (например, url), и, очевидно, DataChannel добавляет ряд способностей, не входящих в WebSockets, делать с ненадежными или частично надежными данными.
У меня есть механизм WebSockets, работающий на моем сайте, и, хотя он лучше, чем AJAX, я подумал, что было бы здорово (не говоря уже о бесконечно awesomer для моего сервера, мне не нужно было передавать столько данных), чтобы сократить WebRTC мои расходы на простое размещение сайта и базы данных, и ничего больше. – Matt
Я считаю, что Мэтт уже знает, но для гостей 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);
};
};
Смотрите этот пример:
DataChannel теперь реализован в Firefox (18+) и Chrome (25+), хотя все еще рано.
Для получения дополнительной информации см. Статью HTML5 Rocks Getting Started with WebRTC.
Является ли DataChannel в Google Chrome согласно спецификации. Потому что [здесь] (https://code.google.com/p/webrtc/issues/detail?id = 1408), он говорит, что SCTP ожидает. Тогда он использует UDP или TCP? – usercode
В настоящее время Chrome предлагает только ненадежные (UDP) данные, ожидающие поддержки SCTP. Firefox предлагает как ненадежные (UDP), так и надежные (TCP). – cjb
http://peerjs.com/ развивается и дает вам WebSocket как синтаксис для передачи p2p данных между экземплярами браузера
Это старый вопрос, но так как я начал изучать WebRTC, я попытаюсь ответить на него.
Прежде всего, некоторое заблуждение:
Это звучало как WebSockets, но без сервера
Там нет никакого способа ЛЮБЫХ данных могут быть переданы между WebRTC коллегами, прежде чем каким-то информацией (управление сеансами СМИ , Сетевые конфигурации/мультимедийные возможности узлов) был правильно обменен и согласован. Для этого вам нужен сервер и signalling (который не является частью 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');
, и это приведет к отправке любых данных, которые вы хотите.
Если что-нибудь, я нашел this book really helpful. Он оставляет много неотвеченных вопросов, но для первого запуска это хорошо.
Я видел блог-сообщение, в котором говорилось, что WebRTC уже может отправлять данные, но он сосредоточился на видеочате. Похоже, что отправка данных уже доступна, но я не мог найти способ ее реализации. – Matt
Возможно, PeerConnnection? – Matt
Что делает данные Peer to Ppeer api отличными от PeerConnection? Похоже, или, по крайней мере, в примере, приведенном в апрельском проекте, оба могут отправлять сообщения без сервера. – Matt