您如何在WebRTC信令中有效地处理新人?

时间:2013-06-21 21:57:10

标签: webrtc signaling

WebRTC没有解决信号问题(即使我们确实以JSEP为起点),但据我所知,它的工作原理如下:

  1. 客户端告诉服务器它在X
  2. 处可用
  3. 服务器保存该信息并将其映射到标识符
  4. 其他客户端来并发送标识符以从第一个客户端获取连接信息
  5. 其他客户端使用它来创建一个连接信息并将其发送到服务器
  6. 服务器将此发送给第一个客户端
  7. 两位客户现在都可以谈谈
  8. 这一切都很好,但如果第三个客户到来会发生什么?

    你必须重做一切。假设前两个客户端仍然连接到服务器,等待第三个客户端发出信号,然后再次启动交换过程,以便获得第三个客户端连接信息。

    这是否意味着您需要为每个客户端(长轮询,websocket等)提供服务器的永久链接?如果是的话,有没有办法有效地做到这一点?

    因为如果我必须设置nodejs或tornado并使其扩展到我的用户数量,我没有看到webRTC的重点。这对我来说听起来不太好。

    请告诉我,我错过了什么。

1 个答案:

答案 0 :(得分:2)

聊天系统怎么样?您是否真的需要为每个客户端保留与服务器的永久链接?当然,因为否则你无法跟踪用户的状态。这种“永久”链接可以通过不同的方式完成:您提到了WebSocket和长轮询,但简单的定期XHR轮询也可以工作(虽然这会影响UX,具体取决于间隔)。

因此,将其视为聊天系统,除了媒体流是P2P以减少延迟。一旦建立了P2P WebRTC连接,服务器就可能死亡,当然,P2P连接将保持在两个客户端之间。我的意思是:一旦P2P连接建立并且仍然在野外互联网中连接在一起,两个用户都可能总是阻止您的服务器。

理解我:一旦建立了P2P连接,您的服务器将不会再进行任何WebRTC信令。只需要连接以跟踪状态。

所以这取决于你的申请。如果你想保持用户的状态并让他们看到他们,那么你和聊天系统的情况相同:你需要保留一定的链接,以确保他们的状态是同步的。否则,您的服务器就可以将它们连接在一起,之后就不需要了。后一种情况的一个例子是:用户进入网页,网页为他提供新的房间URL,用户通过另一个方式将该URL共享给另一个对等方,另一个对等方加入房间,服务器将它们连接在一起(管理) WebRTC信令)然后忘记它们。它们现在已连接,直到其中一个断开链接。就像this reference app

除了中央服务器为每个客户端保留一个连接外,还可以考虑使用网状网络,尽管很难实现。