问题标签 [reliable-multicast]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
11315 浏览

protocols - 可靠多播的最有效协议是什么?

当发送者需要通过以太网以可靠的方式将相对大量的数据(例如每秒几兆字节)多播到同一子网上的适度数量的接收者(例如少于十二个)时,最有效的协议是什么?可靠是指如果一个数据包丢失,协议会确保它被重新发送,这样任何接收器都不会丢失数据。高效这个词很难定义,但是假设我们想要最大化吞吐量并最小化网络带宽,同时两端的 CPU 使用率适中。这仍然不是一个明确的定义,但这是我能想到的最好的定义。面向流或面向消息的协议都是可以接受的。

我很欣赏现实世界的例子,我很乐意接受主观答案,即你最喜欢的多播协议是什么,如果你能解释它的优缺点的话。

0 投票
3 回答
3245 浏览

c++ - 可靠的本地网络组播

我正在使用 C++ 和 Qt 实现一个消息传递系统。经过深思熟虑,我确定多播或多播风格的技术最能解决我的问题。但是,我了解到 UDP 的不可靠性并认为它是不可接受的。

我的要求如下:

  • 消息将以二进制序列化形式发送。
  • 从网络上的任何给定节点,我必须能够向其他节点发送消息。
  • 消息传递必须有保险。

我听说过 OpenPGM 和 NORM 作为 UDP 的替代品。如果有人有这两种经验,可以分享一下吗?

我也对自己在应用层实现“可靠”多播的可能性持开放态度,但如果有一个库已经实现了这一点,我不希望这样做。

我正在使用 C++ 和 Qt,因此 .NET 或基于 Java 的解决方案是不可接受的,除非它们是开源的并且我可以将它们移植到 C++。

非常感谢你。

编辑 20120816T1853 MDT:另一个问题:PGM 或 NORM 是否必须在硬件/IP 级别实施?或者它们可以覆盖在现有协议之上吗?

0 投票
1 回答
317 浏览

c - 接受调用期间的 IPPROTO_RM 阻塞

这个问题类似于https://stackoverflow.com/questions/11650328/using-reliable-multicast-pragmatic-general-multicast-not-returning-from-accept,但我的代码与其略有不同,因此可能会导致在不同的答案中。

我正在尝试获得可靠的多播服务器/客户端概念证明设置。

解决方案本身是一个服务器/客户端连接。客户端通过 TCP/IP 连接到服务器。然后服务器打开一个可靠的多播套接字供客户端监听。客户端通过 TCP 发送消息,服务器通过IPPROTO_RM. 最终目标是让许多客户端连接到服务器,都接收每个回显的消息。

示例代码基于此页面

我已经类似地设置了我的 RM 插座(见下面的清单)。TCP 套接字工作正常。问题出在 RM 插座上。服务器打开多播套接字,然后binds正确connects地打开多播地址。但是,客户端listens正确,但调用会accept永远阻塞。

客户端和服务器进程都在同一台主机上运行。

我已经检查过,并且主机(Server 2008)上安装了多播支持。


更新:我注意到,如果我先从发送方的套接字向套接字发送一些数据,有时接受会返回。这并不理想,也不可靠。

更新:标志指向开关。似乎一个小枢纽不会削减它。我们发生了一起搞笑的事件,导致整栋楼的通讯丢失。


清单

服务器创建并连接多播发送者

客户端创建并接受多播阅读器

0 投票
1 回答
515 浏览

java - Java Client-Server - 将文件分发到多个服务器

我想编写一个 Java 客户端/服务器应用程序,它应该执行以下操作:

  • 客户端连接到两台服务器之一
  • 服务器向客户端发送一个文本文件或其内容
  • 用户编辑文件
  • 客户端将文件同时可靠地发送回两台服务器
  • 客户端关闭应用程序

奖励:这些服务器之一可能在传输时关闭,因此它需要在启动时接收文件。

什么架构或框架将是好的和轻量级的来实现这一点?JGroups 是一个好的开始吗?

编辑:我必须假设以下最小网络:

  • 一个或多个客户端启动应用程序,但不得同时编辑文件。
  • 有一台或多台服务器,其中至少一台始终处于活动状态(哪一台是随机的)
  • 客户端有一个包含所有服务器地址的 .xml 文件
0 投票
2 回答
2080 浏览

tcp - 实现UDP多播可靠的方法

我正在准备我的大学考试,去年的一个问题是“如何使 UDP 多播可靠”(如 tcp,丢失数据包的重传)

我想过这样的事情:

  1. 服务器使用 UDP 发送多播

  2. 每个客户端都发送接收该数据包的确认(使用 TCP)

  3. 如果服务器意识到不是每个人都收到数据包,它会重新发送多播或单播到特定的客户端。

问题是可能有一个客户端通常会丢失数据包并强制服务器重新发送。

好吗 ?

0 投票
2 回答
1590 浏览

sockets - 可靠的多播库 C++

在此处输入图像描述

我知道这一点这个stackoverflow问题,它回答了实现“可靠多播”的已知方法,但是我遇到了一些网站,其中提到甚至路由器也应该被编程来处理通过UDP设计的自定义协议,是真的吗?

基本上我想为我的应用程序使用多播,并且我不想对更改路由器施加任何限制以配置自定义协议以可靠的方式处理 UDP,例如我正在考虑通过 UDP 实现/使用 PGM 协议来处理多播但有人说路由器也应该支持 PGM,这限制了我提供解决方案,因为客户应该为我的解决方案更改基础设施,这是没有根据的。

请让我知道是否有任何解决方案可以实现以可靠的方式处理 UDP 数据包,而无需对网络基础设施进行任何更改。

提前致谢。

编辑:

我并不是说我不想在路由器中启用多播,我肯定会在路由器中启用多播路由。当我读到 PGM 实施时,有人说即使路由器也应该支持 PGM,我认为这与商店中的商用路由器不同。我的理解错了吗?

0 投票
2 回答
2164 浏览

multicast - IP组播和基本组播(B-Multicast)的区别

多播和基本多播(B-Multicast)有什么区别?

他们每个人是如何工作的?


这与分布式系统有关。我们有基本的多播,它只传递具有基本保证和可靠性的消息。由于该进程处于活动状态并且不会崩溃,因此消息将被传递。但是,如果进程崩溃,则无法保证可靠性。因此,引入了术语 R-multicast(可靠多播)。R-multicast 通过使用 ATOMIC 的概念带来了更高的可靠性。它依赖于一些特性,如完整性、有效性。此外,还有一个协议,规定组内的每个成员在传递消息后也要多播消息。该协议带来了 100% 的完整性。此外,它可以通过 B-multicast 或 IP 多播实现,例如 R-IP 多播与 RB 多播。在 RB 组播中,当基础设施可扩展时,发送方将被确认内爆,而在基于 IP 组播的 R 组播中,由于 IP 组播技术,消息的遗漏和失败率很低,因此只会发回 NACK。毕竟,我想知道IP多播和B-multicast之间的区别。它们究竟是如何工作的?我知道所写的概念,但需要更多细节。

0 投票
1 回答
797 浏览

windows - UFTP 未按预期工作

我正在使用 UFTP 在子网计算机中传输文件。

但是,当我使用 -H 仅发送特定计算机而不是发送到所有计算机时,它无法按预期工作。

让我详细解释一下:

  1. 我在 IP 的 172.21.170.198,172.21.181.216 的同一网络中有两台 Windows 机器。
  2. 从其中一个系统,我使用下面提到的命令发送文件

uftp.exe -R 100000 -H 172.21.170.198,172.21.181.216 e:\setup.exe

  1. 但是两台机器都不会收到这些文件。

但是如果我使用这个命令,两台机器都会收到文件。

uftp.exe -R 100000 E:\setup.exe

我想知道我是否犯了任何错误。

如果我错了,请纠正我。

提前致谢。
请回复以进行任何澄清。

问候,
蒂亚古

0 投票
0 回答
111 浏览

multicast - 可靠的多播库

考虑为桌面应用程序实现可靠的多播。通过 JRMS,发现没有适当的文档。JRMS 还在使用吗?或者 JGroups 如何对可靠多播有效?是否有其他可靠的多播库可用,可用于 Java、C++ 等多种语言,

0 投票
1 回答
589 浏览

zeromq - 在 JZMQ 中通过同一个 Socket 发送和接收数据

我正在使用 JZMQ(PGM 协议)开发一个 JAVA 多播应用程序。

是否可以通过同一个套接字发送和接收数据?

如果ZMQ.PUB使用,则仅send()有效,recv()无效。

如果ZMQ.SUB使用,send()则不起作用。

有没有其他方法可以同时使用send()recv()使用同一个 Socket?