使用 WebRTC 在浏览器之间传输 JSON

Transferring JSON between browsers with WebRTC

本文关键字:传输 JSON 之间 浏览器 WebRTC 使用      更新时间:2023-09-26

当我最初听说WebRTC的前景时,我对它的前景感到兴奋。 它听起来像websockets,但没有服务器。 不幸的是,我能找到的所有教程都强调了WebRTC的视频和音频方面。 我找不到有关在浏览器之间发送文本/数据/JSON 的任何信息。 你能帮我写一个简单的hello world吗,只是用WebbRTC将一些数据从一个浏览器发送到另一个浏览器?

这是

在黑暗中刺痛,但最新的 Web API 编辑器草稿具有作为对等数据 API 的一部分的DataChannel接口。

但是,当前的工作草案没有此API,因此它可能是非常新的且尚未实现。

DataChannel现在已经在Firefox(18+)和Chrome(25+)中实现,尽管它仍然处于早期阶段。

有关更多信息,请参阅 HTML5 Rocks 文章 WebRTC 入门。

此功能尚未在任何发布WebRTC实现中实现。正如其他海报所指出的,在最新的WebRTC编辑器草案中,现在有一个DataChannel API,但该协议仍在开发中。预计今年晚些时候将在Chrome和Firefox中看到此API。

这是一个古老的问题,但因为我开始学习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);

在此之后,您可以将数据通道添加到此对等连接:

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

完成此操作后,您只需调用sendChannel.send('Any data you want');,这将发送您想要的任何数据。

如果有的话,我发现这本书真的很有帮助。它留下了很多未解决的问题,但对于第一次开始来说,这很好。

我相信马特已经知道了,但对于谷歌客人:是的,你可以,使用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://www.w3.org/TR/webrtc/#examples
  • https://hacks.mozilla.org/2012/11/progress-update-on-webrtc-for-firefox-on-desktop/#file-datachannels-js-LC12

http://peerjs.com/正在不断发展,并为您提供了类似 websocket 的 p2p 语法 浏览器实例之间的数据传输

正如 Justin 所指出的,协议和 API 仍在确定中;在最近的 IETF 上,我提交了 JS API 下次要协议的草案。 最终形式可能与编辑草稿中的当前提案非常接近,但您可能还需要等待接收方的"打开"。

该 API 以 WebSocket API 为模型,以简化将代码从 WebSocket 实现移动到 DataChannels,尽管并非 WebSocket 中的所有项目都会继承(例如 url),显然 DataChannel 增加了许多与不可靠或部分可靠的数据无关的 WebSocket 功能。