当我最初听说 WebRTC 的前景时,我感到很兴奋。这听起来像 websockets,但没有服务器。不幸的是,我能找到的所有教程都强调了 WebRTC 的视频和音频方面。我找不到任何关于在浏览器之间发送文本/数据/JSON 的信息。你能帮我写一个简单的 hello world 吗,只需使用 WebbRTC 从一个浏览器向另一个浏览器发送一些数据?
7 回答
这是在黑暗中的尝试,但最新的 Web API 编辑器草案有一个DataChannel
接口作为Peer-to-Peer Data API 的一部分。
但是,当前的工作草案没有这个 API,所以它可能是非常新的并且尚未实现。
DataChannel 现已在 Firefox (18+) 和 Chrome (25+) 中实现,但仍处于早期阶段。
有关更多信息,请参阅 HTML5 Rocks 文章WebRTC 入门。
这是一个老问题,但是因为我开始学习webRTC,所以我会尝试回答它。
首先是一些误解:
听起来像 websockets 但没有服务器
在正确交换和协商某些信息(媒体会话管理、节点的网络配置/多媒体功能)之前,无法在 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');
,这将发送您想要的任何数据。
如果有的话,我发现这本书真的很有帮助。它留下了很多悬而未决的问题,但对于第一次开始它是好的。
此功能尚未在任何发布的 WebRTC 实现中实现。正如其他发帖人所指出的,最新的 WebRTC 编辑草案中现在有一个 DataChannel API,但它的协议仍在研究中。预计今年晚些时候会在 Chrome 和 Firefox 中看到这个 API。
我相信马特已经知道了,但对于谷歌客人:是的,你可以,使用 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 );
};
};
请参阅此示例:
http://peerjs.com/正在发展并为您提供类似 websocket 的语法,用于浏览器实例之间的 p2p 数据传输
正如贾斯汀所说,协议和 API 仍在确定中;在最新的 IETF 中,我提交了一份 JS API 下的次要协议草案。最终形式很可能与编辑草稿中的当前提案非常接近,但您可能还需要等待接收方的“onopened”。
该 API 以 WebSocket api 为模型,以简化将代码从 WebSocket 实现移动到 DataChannels,尽管并非 WebSocket 中的所有项目(例如 url)都可以保留,并且显然 DataChannel 添加了许多与不可靠或不可靠的 WebSockets 无关的功能部分可靠的数据。