我需要提出可以可靠地多播到其他客户端的客户端。这意味着我将使用TCP在多播组内的客户端之间可靠地连接。这不是n ^ 2连接数?这对我来说似乎有点傻。不会/不应该有一种方法可以更容易地组织可靠性吗?
编辑:UNIX / C
编辑:我没有说明多线程是如何发挥作用的。但如果我打开n ^ 2个连接,我想,我会多线程,这比我想要的更复杂。答案 0 :(得分:4)
有几种可靠的组播解决方案。
我尝试了前两个。
Norm很简单,就像标准的udp组播一样,但是如果你不需要更多的东西,那就是nacks ......非常好。有一些实现还支持带宽适应和其他改进。
DDS向前迈进了一步。它真的很棒(我知道RTI实现并且效果很好)并且具有很多功能以及非常好的设计。它基于可靠和容错,并且有一个open implementation。
顺便说一下,至少DDS和NORM不需要n ^ 2个连接。它们像多播udp一样工作。
答案 1 :(得分:2)
取决于您的目标平台......
您可以查看Pragmatic General Multicast。据我所知,这是Microsoft MSMQ和Tibco Rendezvous使用的内容,可以通过Winsock访问它(参见:http://msdn.microsoft.com/en-us/library/ms740125(VS.85).aspx)。
答案 2 :(得分:2)
您需要查看0MQ这是一个高速消息系统,它使用Pragmatic General Multicast (PGM) OpenPGM使用0MQ: A new approach to messaging作为其中一项可靠的多播功能。
最近在lwn.net上有一篇文章:
{{3}}
答案 3 :(得分:1)
组播和TCP是互斥的。
通过UDP实现可靠的交付是疯狂的。自20世纪80年代以来,没有人这样做,就性能和BW开销而言,不可能像任何廉价的TCP堆栈一样好。更正:有时它是手动完成的,但仅限于异国情调的运输,例如极长或狭窄的管道。
N ^ 2连接不是很傻。与1Hz keepalive的连接不会花费太多。流量是多少。这就是您的设计需要关注的内容。
答案 4 :(得分:0)
当然有一种更有效的方法 - 您继续使用UDB,并重新实现可靠的发送自己。但不是微不足道的。但至少你只需要在发送站点保持发送的数据包ONCE。
答案 5 :(得分:0)
由于我们永远无法保证'足够快'的客户端,我们在UDP多播之上实现了自己的可靠性协议。在动态连接/断开连接时,实现并不完全通用,但它可能对您有用。你可以在这里找到实现:
http://www.equalizergraphics.com/cgi-bin/viewvc.cgi/trunk/src/lib/net/rspConnection.h?view=markup http://www.equalizergraphics.com/cgi-bin/viewvc.cgi/trunk/src/lib/net/rspConnection.cpp?view=markup
答案 6 :(得分:0)
只是一个想法,但你的工作需要用网络协议来完成。您还可以考虑使用基于发布 - 订阅的模型的消息服务来实现它。
如果您确实需要联网,那么您将不得不处理大量连接或确保自己交付。在走这条路之前,请确保您的要求。