2

WebRTC 没有解决信令问题(即使我们确实以JSEP作为起点),但据我了解,它是这样工作的:

  1. 客户端告诉服务器它在 X 可用
  2. 服务器保存该信息并将其映射到标识符
  3. 其他客户端来并发送标识符以从第一个客户端获取连接信息
  4. 其他客户端使用它来创建它的一个连接信息并将其发送到服务器
  5. 服务器将此发送给第一个客户端
  6. 两个客户现在都可以交谈

这一切都很好,但是如果第三个客户到达会发生什么?

你必须重做所有的事情。假设前两个客户端仍然连接到服务器,等待第三个客户端发出信号,然后再次开始交换过程,以便他们可以获得第三个客户端连接信息。

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

因为如果我必须设置 nodejs 或 tornado 并使其扩展到我的用户数量,我看不到使用 webRTC 的意义。这对我来说听起来不是很p2pish。

请告诉我我错过了什么。

4

1 回答 1

2

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

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

很好理解:一旦建立 P2P 连接,您的服务器将不再进行 WebRTC 信令。仅需要连接来跟踪状态。

所以这取决于你的应用程序。如果您想保留用户的状态并使其对其他人可见,那么您与聊天系统处于相同的情况:您需要以某种方式保留某个链接,以确保他们的状态是同步的。否则,您的服务器可以将它们连接在一起,之后就不需要了。后一种情况的一个例子是:用户访问一个网页,该网页为他提供了一个新的房间 URL,用户通过另一种方式将该 URL 共享给另一个对等点,另一个对等点加入房间,服务器将它们连接在一起(管理WebRTC 信令)然后忘记它们。它们现在已连接,直到其中一个断开链接。就像这个参考应用程序一样。

代替中央服务器为每个客户端保持一个连接,也可以考虑使用网状网络,尽管难以实现。

于 2013-06-22T00:00:06.440 回答