在 Erlang 希望最好的 RPC 语义中,SUN RPC 具有至少一次,Java RMI 具有最多一次,但没有人拥有恰好一次语义。
为什么拥有一次语义似乎不可行?
例如,如果客户端不断重新发送唯一标记的请求,直到收到答复,并且服务器会跟踪所有已处理的请求,以免重复请求。那岂不是正好一次吗?
考虑一下如果服务器在执行请求和记录已执行请求之间崩溃会发生什么?
您最多可以通过记录请求然后执行它来获取一次。如果您在两者之间发生崩溃,那么您(错误地)将其记录为已执行的操作,因此您不会再这样做。因此最多一次
奇怪的是,这个(带有超时)已获得专利:http://www.freepatentsonline.com/7162512.html http://www.freepatentsonline.com/7162512.html。除了我上面所说的之外,它并不能保证恰好一次。
通过执行然后记录下来,你至少可以得到一次。如果两者之间发生崩溃,如果重复请求,您将再次执行该操作。
但在所有情况下都说“恰好一次”并不现实
(类似的场景是网络错误而不是服务器崩溃)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)