2010-08-19 78 views
1

我正在使用twisted来实现客户端和服务器。我在客户端和服务器之间建立了RPC。所以在客户端我做protocol.REQUEST_UPDATE_STATS(stats),这意味着在["update_stats", stats]的某些编码版本的客户端传输上发送消息transport.write。当服务器收到此消息时,将调用服务器协议上的dataReceived函数,对其进行解码并根据消息调用函数,如CMD_UPDATE_STATS(stats)扭曲的RPC是否保证按顺序到达?

如果在客户端上,我做这样的事情:

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

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

更新:编辑更清晰。但现在答案似乎很明显 - 没办法。

+0

什么是“RPC”?你的意思是网络信息?你使用的是TCP套接字还是UDP?是不同的消息通过*相同的*套接字,或不同的?你的协议是否允许异步响应?有没有可能重新排序请求的中间件?如果你想要一个正确的答案,而不仅仅是一个猜测,你可能不适用于你的情况,你必须更具体。 – Glyph 2010-08-19 17:37:12

回答

1

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

但是,一般情况下,只要它们相隔很长的时间(通过互联网100 ms),就可以指望按顺序发送它们。

+2

你可以指望他们正在*发送*的顺序。也许。取决于你使用的是什么类型的交通工具等等。正如Python的禅宗所说:“面对模糊性,拒绝猜测的诱惑。”这个问题非常模糊,你真的不应该回答它,直到提问者提供更多的信息:)。 – Glyph 2010-08-19 17:38:29

相关问题