Networking 通过网络同步消息

Networking 通过网络同步消息,networking,udp,protocols,broadcast,Networking,Udp,Protocols,Broadcast,通过ack使用广播和UDP(我们必须使用它,因为它支持现有系统) 当A向B发送消息时,A的计时器将开始运行,在超时之前,它将再次向B发送相同的消息。B作为许多系统的协调人,可能会在答复A时迟到。此外,答复可能会在过程中丢失。A可以随时向B发送任何消息 在B的ack到达A之前,我们如何降低再次发送B msg的危险(我猜不可能解决),这样A可以将msg注册为失败(在重新发送两次之后),然后B的ack到达A 这真的是广播吗?这听起来不像是纯广播,因为你提到了每个接收器的重传决定。所以我将假设您可以独立

通过ack使用广播和UDP(我们必须使用它,因为它支持现有系统)

当A向B发送消息时,A的计时器将开始运行,在超时之前,它将再次向B发送相同的消息。B作为许多系统的协调人,可能会在答复A时迟到。此外,答复可能会在过程中丢失。A可以随时向B发送任何消息


在B的ack到达A之前,我们如何降低再次发送B msg的危险(我猜不可能解决),这样A可以将msg注册为失败(在重新发送两次之后),然后B的ack到达A

这真的是广播吗?这听起来不像是纯广播,因为你提到了每个接收器的重传决定。所以我将假设您可以独立地向每个接收器发送数据包

通过借鉴TCP的概念,您可以构建良好的可靠性机制。TCP有最通用、最老套的解决方案——它处理无序的重新组装,可以扩展到高带宽、高延迟(使用ACK窗口),并且对信道条件具有一定的适应性

取决于你在做什么,这可能是过分的。相反,您可以借用USB,它在数据包传递和确认中也具有可靠性和消除歧义的机制。但它一次只能处理一个未完成的数据包(例如,窗口大小==1),并且不能处理无序交付,如果您有高带宽或高延迟要求,这将成为主要的性能限制

在任何一种情况下,您的总超时时间(用于向应用程序层发出传递失败的信号)都应该很长,以至于在正常操作过程中都不会遇到。例如,TCP实现将等待15秒以上,以放弃交付,并向应用层发出问题信号

除了基本的一次一包交付之外,设计任何东西都需要认真的协议设计和QA才能正确进行。角落里的箱子很难打。如果您的需求非常重要,那么您需要雇佣一些可靠的网络协议工程师,或者找到一种使用现有解决方案(如TCP)的方法


另请参见相关讨论。

应用程序B需要编写一个高优先级、最好是实时调度的线程,以等待来自应用程序a的数据包。当B收到数据包时,将有效负载复制到内存锁定的循环缓冲区中,并立即返回轮询套接字。然后让应用程序B中的业务级逻辑从循环缓冲区中读取以进行实际处理