Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
532 views
in Technique[技术] by (71.8m points)

主服务器向从服务器发送消息,如何保证消息一定到达,然后限制时间(如5s内)?

上次面试一家java的公司面试的人问我的,如何保证可靠性和时间呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

我想这个问题可能有点儿问题,问题要求,如何实现:“保证消息5秒内一定到达”,但这是一个不可能完成的任务,如果消息发出去的时候,网络中断了10秒。那你就是有逆天的本事,代码也没办法跨越虚空把数据发到另一台服务器啊。

所以,问题应该是:“将消息发送到从服务器,并且如果超过5秒,则放弃发送,保证超过5秒一定失败,而不会存在主服务器认为数据没有发送,而实际上从服务器却接收到了的情况”

如果问题是这样的话,我们可以这样做。
主服务器发送消息,并且等待从服务器的响应,就像http协议一样,请求和响应对应。
主服务器发送的消息里面包含消息发送时间,和消息的唯一ID。

主服务器发送数据,那么会有这么几种情况:

  • 收到从服务器的成功响应
  • 收到从服务器的失败响应,例如从服务器收到数据的时候,数据已经超过了5秒,所以拒绝处理。
  • 没有收到响应,例如网络中断

前两种情况我们都可以“确定”,第三种情况。我们可以重新发送这个请求。此时会出现这些情况

  • 收到从服务器的成功响应
  • 从服务器上次已经接收到请求了,所以这次返回成功
  • 收到从服务器的失败响应,例如从服务器收到数据的时候,数据已经超过了5秒,所以拒绝处理。
  • 没有收到响应,例如网络中断

前三种情况我们都可以“确定”

如果是第四种情况,那么我们继续发送,继续是上面4种结果。

就这样,我们就能保证消息一定发送成功,或者一定发送失败,而不会出现不知道消息发送成功没有的问题了。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...