Mar*_*oup 3 javascript networking p2p node.js webrtc
我想弄清楚是否有可能出现这样的情况:
假设我们有两个人,爱丽丝和鲍勃。Alice 想要向 Bob 发送一些数据(无论这些数据是什么),反之亦然。我知道WebRTC可用于无服务器交换消息,但这需要 Alice 和 Bob 知道彼此的 IP 地址。现在,Alice 和 Bob 可以相对容易地共享一次 IP 地址来初始化连接,但如果其中一个碰巧连接到不同的网络,会发生什么情况?例如,也许鲍勃在一家咖啡店,因此他的 IP 地址不同?之前初始化的连接不会连接到他当前的 IP 地址,因此他们必须重新初始化连接;但如何呢?
在我看来,两者之间已经需要某种预先存在的通信,以便他们可以共享他们的 IP 地址,但是为什么不直接通过他们传达 IP 地址的方法进行通信呢?或者,可能有一台服务器连接两者,但这会破坏系统的无服务器部分。
那么,即使两个客户端碰巧改变了网络和 IP 地址,有没有办法保持它们之间的通信呢?也许有一种比 IP 地址更固定的方法来识别设备,就像我在这个 SO 答案中看到的那样,但它已经有很多年了,所以也许有新的东西?我会在 JS 中跨多个设备/操作系统实现这个,所以这个答案可能行不通。任何想法/例子将不胜感激;我主要想知道这是否可能,如果可能,如何实现。
不,虽然这是可能的,但这是不现实的,也没有必要。请参阅下面我的详细解释。另外,如果你真的想这样做,尽管可以通过QUIC实现,但不太可能需要 it\xe2\x80\x99s (如下所述)。
\n简而言之,这不是 WebRTC 所需要的功能。让我问你一个问题:
\nAlice 和 Bob 在数据通道中,通过 WebRTC 交换聊天消息。要创建 WebRTC 连接,您需要使用 Ice 服务器(第一个链接、第二个链接)来让 Alice 和 Bob 都连接到,引用维基百科:
\n\n...找到让两台计算机尽可能直接相互对话的方法..
\n
这意味着它将使用 Alice\xe2\x80\x99s 当前的 IP 地址通过 STUN 或 TURN 服务器向 Bob 发出报价。正如您所说,如果 Alice 要更改 IP 地址,她就需要更改位置。这意味着她需要移动足够的距离,以便 IP 地址发生变化。实际上,这可能意味着她开车去某个地方。如果没有,她会叫 Uber、出租车或骑自行车。在大多数情况下,她需要关闭计算机,从而结束 p2p 连接。如果通过某种奇怪的魔法,她\xe2\x80\x99没有关闭她的计算机/连接,浏览器很可能会刷新,从而从新的IP地址重新连接到WebRTC数据通道。您何时需要创建 WebRTC 数据通道并处理 IP 更改?长解释得出结论,客户端在不结束/重置连接的情况下更改 IP 地址在实践中不会发生\xe2\x80\x99。
\n如果您想研究其他替代方案,这里有一些示例:
\n现在,这不是您可以检查的实际全局变量,但您可以使用在线 API(此处列出了一些)来检查用户 xe2x80x99s IP 地址,将其存储在变量中(或localStorage),并检查IP是否发生变化。在循环中,您将执行一些简单的逻辑来检查如果是,则重置 WebRTC 连接,如果不是,则保持循环继续。
\n您可以使用 http/https 服务器来设置简单的聊天,该服务器已设置(如此处所述) ,称为管道服务器。您可以查看该文章以获取更多信息,但它提倡无服务器聊天系统(无需创建服务器即可使用),该系统不会遇到更改 IP 地址的困难。但是,您需要知道peer\xe2\x80\x99s ID,并且他们需要知道您的ID,这实际上使解决方案过时,因为您需要在建立这个简单的聊天之前进行某种通信。
\n如果您想创建一个简单的聊天应用程序或创建一个数据通道,Node.js 和 Socket.io 是最佳选择。这非常简单,但是,它涉及到服务器,这就是为什么我把它留到最后。不过,出于方便和简单的考虑,我强烈建议这样做,并且不依赖于 IP 地址。请参阅此处,了解 Node.js 和 Express 框架的良好入门体验。我远非 Websockets 专家,但MDN始终是一个不错的起点。不管 Websockets 有多好,我认为 Socket.io 对于初学者来说要容易得多,所以如果你愿意为了简单性而牺牲一点速度,你应该从这里开始。这些都是很好的服务器端聊天起点。
\n所以问题,
\nNode.js 和 Express 设置、Websocket 介绍和Socket.io 介绍
\n所有带星号的替代方案 (\xe2\x98\x85) 都是个人推荐的。
\n| 归档时间: |
|
| 查看次数: |
1188 次 |
| 最近记录: |