首先:我对javascript中事件时间的了解很差,所以如果我的问题看起来很明显,请接受我的歉意(如果我用问题轰炸你,对不起)。
当对等点 A 通过DataConnection.on('connection', function() {...})
处理另一个对等点 B 的连接时,该连接是否在处理程序内部准备好,或者在事件处理程序返回后它是否变得完全可用? 我的意思是:A 可以像这段代码一样向 B 发送数据消息吗?
peerA.on('connection', function(c) {
// do something
c.send("Welcome! (will this message ever got delivered?)");
// do something else
});
如果这是不可能的,那么有一个“连接后”事件来处理这些情况不是很好吗? 或者也许下面的代码可以工作?
peerA.on('connection', function(c) {
// do something
setTimeout(function() {
c.send("Welcome! (will this message ever got delivered?)");
}, 0);
});
谢谢你。
它已准备好在处理程序中使用。 我发现“开始连接”事件不是很有用。 在什么情况下你觉得它有用?
在我正在开发的项目中,一个问题是避免不必要的连接。
共有三个角色:学生、演讲者、教师(我在注册对等点时添加了一个元数据标志,指示选项数组中的角色)。 教师使用他的已知 ID 连接到服务器,并等待演讲者和学生。 一旦它们都连接好,就必须避免进一步的连接。
您在 v2.0.0 中实现的拒绝应该可以完成这项工作,但在我看来,API 中的更改非常激进。
是的,新版本是市长版本(破坏性,没有向后兼容性)。 旧的 API 相当混乱,而且从 2013 年的第一天开始,代码就有很多遗留的技巧,很难维护。
但由于这是一个突破性的变化,我会继续支持旧版本,所以我会在 v1 中实现一些拒绝的方式。 无论如何,如果您不需要支持非常旧的浏览器,我建议您迁移到 v2。 您将获得稳定性,并且不需要托管 PeerServer。
v2 中的拒绝尚未完成,但我专注于 v2 开发,因此该功能将很快准备就绪。
我查看了您为 v2 提供的示例,它看起来确实令人印象深刻:几行代码中的简单一对一聊天! 此外,我已经对代码进行了一些调整,并且我看到每当有人加入房间时,每个对等点都会触发 onRemoteStream,从而可以处理您的带宽可能支持的所有媒体连接:哇!!!
只是几个问题:
PS 我看到你已经更新了路线图,计划为每个房间添加最大数量的对等点,这是我真正需要的!
是的! 我刚刚将该功能添加到计划中,应该很容易实现
您已经可以访问处理程序上的流。 它没有很好的文档记录,但是正如您所说,每个对等方都会收到一个远程流,而您自己的远程流一次,现在可用于所有连接,如果需要,将来可能会更改。
您的意思是在发送流之前处理它们吗? 如果是这样,它也可以实施。
是的,您会收到原始数据通道,每个连接的对等点一个。 它也适用于上述元数据功能。
PeerJS 需要一个通道来执行初始信号。 但现在不再使用 PeerServer,所有逻辑都由 PeerJS 库自己完成,并且只需要一个 MQTT 代理。 所以你仍然需要一个服务器,但是 MQTT 是一个标准协议,所以你只需要设置一个代理,也不需要数据库或任何东西都保存在服务器内存中(如 v1 中),因此它是完全可扩展的。
好消息! 我想我肯定会从 v1 切换到 v2。 这将使一切变得容易得多。 非常感谢!
感谢惊人的图书馆
最有用的评论
是的! 我刚刚将该功能添加到计划中,应该很容易实现
您已经可以访问处理程序上的流。 它没有很好的文档记录,但是正如您所说,每个对等方都会收到一个远程流,而您自己的远程流一次,现在可用于所有连接,如果需要,将来可能会更改。
您的意思是在发送流之前处理它们吗? 如果是这样,它也可以实施。
是的,您会收到原始数据通道,每个连接的对等点一个。 它也适用于上述元数据功能。
PeerJS 需要一个通道来执行初始信号。 但现在不再使用 PeerServer,所有逻辑都由 PeerJS 库自己完成,并且只需要一个 MQTT 代理。 所以你仍然需要一个服务器,但是 MQTT 是一个标准协议,所以你只需要设置一个代理,也不需要数据库或任何东西都保存在服务器内存中(如 v1 中),因此它是完全可扩展的。