可靠的udp广播库?
是否有任何库在 UDP 广播之上放置了可靠性层?
我需要尽快将大量数据广播到大量机器,通常看起来这样的问题一定已经解决了很多次,但除了 Spread 工具包之外我找不到任何东西,它具有某种程度的病毒式许可证(您必须在最终产品的所有广告材料中提及它,我不确定我们的客户是否愿意这样做)。
我已经打算自己写这样的东西了(因为这样做会非常有趣!)但决定先问一下。
我还查看了UDT(http://udt.sourceforge.net),但它似乎没有提供广播操作。
PS 我正在寻找像库一样轻量级的东西 - 没有基础设施的变化。
Are there any libraries which put a reliability layer on top of UDP broadcast?
I need to broadcast large amounts of data to a large number of machines as quickly as possible, and generally it seems like such a problem must have already been solved many times over, but I wasn't able to find anything except for the Spread toolkit, which has a somewhat viral license (you have to mention it in all materials advertising the end product, which I'm not sure our customer will be willing to do).
I was already going to write such a thing myself (because it would be extremely fun to do!) but decided to ask first.
I looked also at UDT (http://udt.sourceforge.net) but it does not seem to provide a broadcast operation.
PS I'm looking at something as lightweight as a library - no infrastructure changes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
UDP组播怎么样?查看 PGM 协议,该协议有多种商业和开源实现。
免责声明:我是 OpenPGM 的作者,它是上述协议的开源实现。
How about UDP multicast? Have a look at the PGM protocol for which there are several commercial and open source implementations.
Disclaimer: I'm the author of OpenPGM, an open source implementation of said protocol.
尽管已经对可靠的 UDP 多播进行了一些研究,但我还没有使用过类似的东西。您应该考虑到这可能并不像听起来那么微不足道。
如果您没有目标网络中的节点列表,即使接收消息的活动节点可以确认它们,您也不知道何时以及向谁重新发送。发送到大量节点,期望来自所有节点的确认也可能会导致网络拥塞问题。
我建议重新考虑应用程序的网络架构,例如使用某种集中式解决方案,您向服务器提交更新,然后它将此消息发送到所有连接的客户端。或者,如果原始发送者节点的地址是先验已知的,则只需让客户端连接到它,并让发送者通过这些连接推送更新。
Though some research has been done on reliable UDP multicasting, I haven't yet used anything like that. You should take into consideration that this might not be as trivial as it first sounds.
If you don't have a list of nodes in the target network you have no idea when and to whom to resend, even if active nodes receiving your messages can acknowledge them. Sending to a large number of nodes, expecting acks from all of them might also cause congestion problems in the network.
I'd suggest to rethink the network architecture of your application, e.g. using some kind of centralized solution, where you submit updates to a server, and it sends this message to all connected clients. Or, if the original sender node's address is known a priori, then just let clients connect to it, and let the sender push updates via these connections.
查看 IETF 站点上有关可靠多播的 RFC。有一个完整的工作组专门负责此事。为了不同的目的,已经开发了多种协议。还可以查看 Oracle/Sun 的 Java 可靠多播服务项目 (JRMS)。它是 Sun 的一个研究项目,从未得到支持,但它确实包含 TRAM 和 LRMS 协议的 Java 绑定。
Have a look around the IETF site for RFCs on Reliable Multicast. There is an entire working group on this. Several protocols have been developed for different purposes. Also have a look around Oracle/Sun for the Java Reliable Multicast Service project (JRMS). It was a research project of Sun, never supported, but it did contain Java bindings for the TRAM and LRMS protocols.