Networking 网络设计:排除用户的一对多高带宽传输

Networking 网络设计:排除用户的一对多高带宽传输,networking,network-programming,bandwidth,broadcasting,Networking,Network Programming,Bandwidth,Broadcasting,如果StackOverflow是这个问题的错误交换,请帮助我找到正确的交换 短版 一个用户将恒定的高带宽数据流传输到许多其他地址的网络应用程序的最佳设计是什么?该解决方案不得要求上传者为每个接收者复制数据包,并且优选地,不会向尚未被发送者接受的用户发送数据包 长版本 我和一位朋友编写了一个应用程序,使某人能够将数据实时传输给一个或多个他想要接收数据的接收者。我设计了高级应用程序协议来使用UDP并对数据进行编码,这样每个数据包都可以丢失,而不会影响其余数据包的使用。此解决方案需要管理每个用户的套接

如果StackOverflow是这个问题的错误交换,请帮助我找到正确的交换

短版
一个用户将恒定的高带宽数据流传输到许多其他地址的网络应用程序的最佳设计是什么?该解决方案不得要求上传者为每个接收者复制数据包,并且优选地,不会向尚未被发送者接受的用户发送数据包

长版本 我和一位朋友编写了一个应用程序,使某人能够将数据实时传输给一个或多个他想要接收数据的接收者。我设计了高级应用程序协议来使用UDP并对数据进行编码,这样每个数据包都可以丢失,而不会影响其余数据包的使用。此解决方案需要管理每个用户的套接字,并将每个数据包发送给每个用户

这里的问题是,流的带宽可能非常高。用户可以修改他发送的数据的高质量设置,最终可以向每个用户发送6 Mbps的数据。期望一个用户向他的ISP支付足够的费用,允许他将这样的流一次上传到至少四个其他用户,这是不可行的

我们需要一种方法,让发送器只发送一次数据包,并让每个用户接收一份副本

我们已经研究了多播。这可能是我们最终需要使用的,但我们担心的是,任何人都可以加入任何团体。最好不允许我们不希望看到数据的用户加入。还有一个问题是,如果多个发射机碰巧使用同一组,观众可能会发现他们正在接收多个流的数据,而他们只需要一个流

我的搜索揭示了IBM在十年前发布的一个称为Explicit Multicast()的东西,它看起来很完美,但我还没有找到任何信息来确定这项技术是否得到普遍支持。此外,我还没有看到它是否支持数据报

有人知道设计满足我们需求的应用程序的最佳方法吗

请记住,我们没有资金支持我们的项目。解决方案必须是免费的

编辑 在上面的总结中,我暗示了这是用于实时应用程序的,但没有明确说明。应用程序背后的驱动力是使客户/收件人尽可能及时地保持在一起。如果数据包丢失或到达太晚,无法用于保持服务器和客户端同步,则需要忽略它们。这就是为什么我在UDP之上设计了应用程序协议,每个数据包中都有独立的数据。即使客户机在给定的时间步长内只收到300个数据包中的一个,它也会使用它所得到的数据包

我认为我的建议可能是朝着正确方向(或可能是目的地)迈出的一大步。我需要做一些实验来确定使用像Spread这样的系统是否有效。然而,我不认为我可以预算超过额外17毫秒的传输时间

如果您能想到一个系统,它能够为实时应用程序()向特定用户组(如Spread)发送不可靠的数据报,请告诉我

我们需要一种方法让发送器准确地发送一个数据包 让每个用户都收到一份副本

就我所知有限,我想说这似乎是该集团广播的可行选择之一。我想提到的是,有一些可能的Java API*可以帮助您实现同样的目标:

  • ->Spread由一个与用户应用程序链接的库、一个在作为处理器组一部分的每台计算机上运行的二进制守护进程以及各种实用程序和演示程序组成
  • *注意:我从未使用过这些API

    最好不要让我们不想看到 不允许数据加入

    它们确实提供了这一功能,例如,Spread支持具有不同成员集的数千个组。它还为消息提供了一系列可靠性、顺序和稳定性保证。JGroups可用于创建进程组,其成员可以相互发送消息。它还具有创建和删除组等功能(组成员可以分布在LAN或WAN中)

    还有一个问题是,如果多个变送器碰巧使用 在同一组中,观众可能会发现他们正在接收多个视频 当流只需要一个数据时,流的数据价值

    当您可以轻松地在同一网络中创建多个组(使用Spread等)时,我相信这将不再是一个问题。您有责任将用户解密为不同的组

    我希望所提供的信息有帮助。祝你好运

    我们需要一种方法让发送器准确地发送一个数据包 让每个用户都收到一份副本

    就我所知有限,我想说这似乎是该集团广播的可行选择之一。我想提到的是,有一些可能的Java API*可以帮助您实现同样的目标:

  • ->Spread由一个与用户应用程序链接的库、一个在作为处理器组一部分的每台计算机上运行的二进制守护进程以及各种实用程序和演示程序组成
  • *注意:我从未使用过这些API

    最好不要让我们不想看到 不允许数据加入

    它们确实提供了这一功能,例如,Spread支持具有不同成员集的数千个组。它还为消息提供了一系列可靠性、顺序和稳定性保证。JGroups可用于创建进程组,其成员可以向我发送消息