扭曲的RPC是否保证按顺序到达?

时间:2010-08-19 17:17:56

标签: python concurrency twisted rpc consistency

我正在使用twisted来实现客户端和服务器。我在客户端和服务器之间设置了RPC。因此,在客户端上我执行protocol.REQUEST_UPDATE_STATS(stats),这转换为在客户端传输上发送带有transport.write的邮件,该邮件是["update_stats", stats]的某些编码版本。当服务器收到此消息时,将调用服务器协议上的dataReceived函数,对其进行解码,并根据消息调用函数,如本例中的CMD_UPDATE_STATS(stats)

如果在客户端,我做了类似的事情:

protocol.REQUEST_UPDATE_STATS("stats1")
protocol.REQUEST_UPDATE_STATS("stats2")

...我保证"stats1"消息在服务器上的"stats2"消息之前到达吗?

更新:编辑更清晰。但现在答案显而易见 - 没办法。

1 个答案:

答案 0 :(得分:1)

它们将按照Python进程收到请求的顺序到达。这包括连接建立时间加上包含请求数据的数据包。所以不,由于网络延迟,丢弃数据包,发送方数据包排队等原因,这不能保证发送进程发送请求的顺序。“顺序”也是分布式系统的松散定义。

但是,是的,一般情况下,只要它们被相对较长的时间(互联网上的100毫秒)分开,你就可以指望它们按顺序交付。