【问题标题】:Replacing Socket io with Pubnub (WebRTC)用 Pubnub (WebRTC) 替换 Socket io
【发布时间】:2014-06-19 21:40:38
【问题描述】:

我正在考虑使用 Pubnub 的服务在视频对等方之间建立 WebRTC 连接。 有了这个,我希望避免使用我目前正在使用的 socket io,尽管我找不到任何好的例子来演示如何做到这一点。

现在 socket io 正在处理从客户端和服务器发出的事件。据我了解,当前节点 js 服务器将不再需要处理任何发出的事件,因为不会使用套接字 io,但这就是我遇到的问题。我不确定如何设置客户端以相互发送他们需要的信息(连接到谁等)

是否有任何使用 pubnub 代替 socket io 用于项目的简单示例或实现,或者也许有人可以阐明我可能看不到的东西,谢谢!

编辑:对于任何在 Pubnub 有经验的人来说,我正在尝试做的事情甚至可能哈哈

【问题讨论】:

  • 在答案中提供一些细节,很快就会出现在这里。

标签: javascript node.js webrtc publish-subscribe pubnub


【解决方案1】:

WebRTC 信令通过 PubNub 交换 ICE 候选人

目标是在两个对等方之间交换 ICE 候选数据包。 ICE candidate packets are structured payloads which contain possible path recommendations between two peers. 你可以使用一个库来处理细节问题,例如http://www.sinch.com/,下面是你想要采取的一般方向:

信令示例代码如下

<script src="http://cdn.pubnub.com/pubnub-3.6.3.min.js"></script>
<script>(function(){

    // INIT P2P Packet Exchanger
    var pubnub = PUBNUB({
        publish_key   : 'demo',
        subscribe_key : 'demo'
    })

    // You need to specify the exchange channel for the peers to
    // exchange ICE Candidates.
    var exchange_channel = "p2p-exchange";

    // LISTEN FOR ICE CANDIDATES
    pubnub.subscribe({
        channel : exchange_channel,
        message : receive_ice_candidates
    })

    // ICE CANDIDATES RECEIVER PROCESSOR FUNCTION
    function receive_ice_candidates(ice_candidate) {
        // Attempt peer connection or upgrade route if better route...
        console.log(ice_candidate);
        // ... RTC Peer Connection upgrade/attempt ...
    }

    // SEND ICE CANDIDATE
    function send_ice_candidate(ice) {
        pubnub.publish({
            channel : exchange_channel,
            message : ice
        })
    }

生成 ICE 候选示例代码如下:

    // CREATE ICE CANDIDATES
    var pc = new RTCPeerConnection();
    navigator.getUserMedia( {video: true}, function(stream) {
        pc.onaddstream({stream:stream});
        pc.addStream(stream);
        pc.createOffer( function(offer) {
            pc.setLocalDescription(
                new RTCSessionDescription(offer),
                send_ice_candidate, // - SEND ICE CANDIDATE via PUBNUB
                error
            );
        }, error );
    } );

    // ERROR CALLBACK
    function error(e) {
        console.log(e);
    }
})();</script>

更多有趣的细节等待 - https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection

【讨论】:

  • 大多数人会看不起占位符的答案...有完整答案的请完整回答...
  • 同意! :-) 已跟踪并在上面进行了更新,现在答案状态更好了。
  • 谢谢!这非常有帮助:D
  • 您知道 pubunb 是否可以处理 10k+ 对等点同时尝试连接到单个广播?
  • @JerryFox - 是的! :-) PubNub 今天在一个频道上的单次广播达到了超过 300 万次广播的峰值。在超过 25 亿台设备的连接池中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多