0

我正在使用一个本质上是黑匣子的设备,它唯一已知的通信方法是 XML-RPC。它适用于大多数需求,除了当我需要非常快速地执行两个命令时。由于开销和等待 RPC 响应,这并不像期望的那么快。

我的主要问题是,如何减少这种开销以使此功能成为可能?我知道显而易见的解决方案是放弃 XML-RPC,但我认为这对这个设备来说是不可能的,因为我无法控制从“服务器”实现任何其他协议。这也使得无法进行 MultiCall,因为我无法为 MultiCall 添加有效指令。MultiCall 是否必须在服务器端实现?例如,如果我已经由服务器实现了 method1()、method2() 和 method3(),那么这段代码是否应该在一个回复中执行它们?到目前为止,我假设我的测试没有,因为文档显示了我需要在服务器端初始化命令的示例。

server=xmlrpclib.ServerProxy(serverURL)
multicall=xmlrpclib.MultiCall(server)
multicall.method1()
multicall.method2()
mutlicall.method3()
multicall()

此外,查看 xmlrpclib 的源代码,我看到对“FastParser”的引用,而不是使用的默认值。但是,我无法确定如何在默认情况下启用此解析器。此外,对此答案的评论提到它一次解析一个字符。我相信这是相关的,但同样,不知道如何更改此设置。

4

1 回答 1

0

除非您的请求或响应的体积非常大,否则更改解析器不太可能影响周转时间(因为 CPU 比网络快得多)。

如果可能,您可能需要考虑向设备发送多个命令,而无需等待第一个命令的响应。如果设备可以一次处理多个请求,那么这可能是有益的。即使设备只按顺序处理请求,您仍然可以让下一个请求在设备处等待,这样在处理前一个请求之后就没有延迟。如果设备以这种方式序列化请求,那么这将是你能做的最好的事情。

于 2012-07-24T00:38:24.180 回答