我正在尝试通过多个 ad-hoc 节点之间的无线广播通道创建共享总线。每个节点都可以随时传输,所有节点都需要能够互相听到。这听起来像是多播的工作,特别是OpenPGM(请参阅这个问题了解其他人在问什么),除了我读到的关于 OpenPGM 的内容是它无法处理多个广播到同一个多播地址(显然,NACK 得到输了,但我不是专家,如果有人想纠正我,请随时!)。由于 OpenPGM 可能无法正常工作,我决定长期认真地考虑我对库的最低要求。他们来了:
- 必须通过 UDP 工作。
- 需要处理消息;希望能够一次向图书馆发送一条消息,并一次收到一条消息。
- 只需要到达最近的邻居!
- 需要在广播上工作,以便同时更新许多邻居。
- 需要支持多个邻居同时广播,他们之间没有任何协调。
- 需要从相应的数据包中自动重组消息,并将消息分解成数据包。
- 只需要合理可靠;这意味着以下所有内容:
- 消息可能会丢失,因为某些数据包根本无法通过。
- 消息可能被认为已经通过,因为 NACK 没有返回。
- 你能想到的任何其他原因。
最后一组点很重要;一条消息可能会丢失,我不在乎。这就是“合理可靠”的来源。我不希望图书馆将不完整的消息交给我,我宁愿它们在合理的超时期限后被丢弃。我也不关心它是否不能保证任何消息的传递;如果需要,我可以在上面建立更强大的可靠性保证。基本上,它只需要确保如果我收到一条消息,那么它是完整的。它不必保证其他任何事情。
那么,有没有类似的东西呢?还是我应该自己写?
编辑:澄清一下,我的消息可能比单个 UDP 数据包可以处理的要大。如果不是这种情况,我会直接使用 UDP 广播,并输入某种编号方案,让我知道我是否收到了数据包。这就是为什么我正在寻找一个可以为我处理它的图书馆。
另请注意,我的节点本身不可靠;它们失去连接,并定期重新启动。这种情况很少发生,但它会发生。如果图书馆因为同伴死亡而挂断,那么我将无法使用它。
感谢你目前的帮助!