我正在使用一个基本上是黑盒子的设备,唯一已知的通信方法是XML-RPC。它适用于大多数需求,除非我需要在彼此之后非常快速地执行两个命令。由于开销和等待RPC响应,这并不像期望的那样快。
我的主要问题是,如何减少此开销以使此功能成为可能?我知道显而易见的解决方案是放弃XML-RPC,但我不认为这个设备是可能的,因为我无法控制从“服务器”实现任何其他协议。这也使得无法进行MultiCall,因为我无法为MultiCall添加有效指令。 MultiCall是否必须在服务器端实现?例如,如果我已经由服务器实现了method1(),method2()和method3(),那么这段代码是否可以在一个回复中执行它们?到目前为止,我从我的测试中假设没有,因为the documentation显示了我需要在服务器端初始化命令的示例。
server=xmlrpclib.ServerProxy(serverURL)
multicall=xmlrpclib.MultiCall(server)
multicall.method1()
multicall.method2()
mutlicall.method3()
multicall()
另外,查看xmlrpclib的源代码,我看到对“FastParser”的引用,而不是使用的默认引用。但是,我无法确定如何在默认情况下启用此解析器。另外,the comment on this answer提到它一次解析一个字符。我相信这是相关的,但同样,不知道如何更改此设置。
答案 0 :(得分:0)
除非您的请求或响应的大小非常大,否则更改解析器不太可能影响周转时间(因为CPU比网络快得多)。
如果可能,您可能需要考虑向设备发送多个命令,而无需等待第一个命令的响应。如果设备可以同时处理多个请求,那么这可能是有益的。即使设备只按顺序处理请求,您仍然可以在设备上等待下一个请求,以便在处理完前一个请求后没有延迟。如果设备以这种方式串行化请求,那么这将是你能做的最好的事情。