扭曲的 RPC 是不是保证按顺序到达?
Posted
技术标签:
【中文标题】扭曲的 RPC 是不是保证按顺序到达?【英文标题】:Are twisted RPCs guaranteed to arrive in order?扭曲的 RPC 是否保证按顺序到达? 【发布时间】:2010-08-19 17:17:56 【问题描述】:我正在使用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"
消息之前到达?
更新:为更清晰而编辑。但现在答案似乎很明显——不可能。
【问题讨论】:
什么是“RPC”?你的意思是网络消息?您使用的是 TCP 套接字还是 UDP?不同的消息是通过 same 套接字还是不同的?您的协议是否允许异步响应?是否有任何中间件可以重新排序请求?如果您想要一个正确的答案而不是仅仅猜测可能不适用于您的情况,那么您必须更加具体。 【参考方案1】:它们将按照 Python 进程收到请求的顺序到达。这包括连接建立时间加上包含请求数据的数据包。所以不,这不能保证是发送进程发送请求的顺序,因为网络延迟、丢弃的数据包、发送方数据包排队等。对于分布式系统,“有序”也是松散定义的。
但是是的,一般来说,只要它们相隔较长的时间(互联网上的 100 毫秒),您就可以指望它们按顺序交付。
【讨论】:
您可以指望它们按顺序发送。也许。取决于您使用的传输方式等。正如 Python 的禅宗所说:“面对歧义,拒绝猜测的诱惑。”。这个问题非常模棱两可,在提问者提供更多信息之前,您真的不应该回答它:)。以上是关于扭曲的 RPC 是不是保证按顺序到达?的主要内容,如果未能解决你的问题,请参考以下文章
Django Channels 2.4 ... WebSocket 消息是不是总是按顺序到达