2015-10-10 22 views
1

3-way Message passing reliable IPC Protocol diagram3路消息传递可靠的IPC协议有哪些问题?

在这里,在这个页的末尾。最后一段, 他们提到了这个协议中出现的一些问题。 我无法理解这些问题。 ?例如, 。他说。 “如果请求处理时间很长” 我无法理解此声明。客户处理需要很长时间的请求在哪里?或在服务器上? 或者我无法理解时钟(时间)在哪里?它在客户端还是服务器端?因为这里提到了2点结束。 “如果在这段时间内没有收到答复,则客户端机器的内核会重新发送请求消息。”

回答

1

考虑一下:

  • 客户端发送消息。如果它没有收到来自服务器的回复 - 例如 - 1分钟,它将再次发送消息。
  • 当服务器收到一条消息时,它仅在已经生成了对客户端发送的消息的完整响应之后才发送回复

不假设您作为客户端向服务器发送消息。服务器收到您的消息,并开始处理它。在这个时候,你,客户端,不知道服务器是否收到了消息。假设您向服务器发送复杂的任务,需要1分5秒来完成。 1分钟后(忽略传输时间),服务器仍在忙于您的工作,但您作为客户端不知道任何此类信息并再次发送消息。

现在,根据实际协议的实现,也有一些潜在的问题:

  • ,通过再次发送消息,可以增加一些序列数,因此无法接收回复这是可能的之后的原始消息。
  • 服务器可能无法确定到达的消息是第一条消息还是必须再次发送的消息。因此,它可能已经完成了它的工作,导致不必要的处理,或者在最坏的情况下导致(业务)逻辑错误。

此外,通过发送消息和答复可能不需要多次,您增加传输的总数据量,而不会从中获得任何东西。

要“解决”这个问题,您可以在客户端再次发送消息之前增加等待时间。这将在服务器上长时间运行的任务中“解决”问题,但是也会因为你在等待更长的时间甚至发送新消息而在消息实际上丢失了的情况下受到伤害。

这里的“真正”解决方案是让服务器在收到来自客户端的消息后立即确认,就像“我收到您的消息,我会很快发送回复!”甚至在开始实际处理消息之前。