2012-07-16 128 views
0

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

我的主要问题是,如何减少这种开销以使此功能成为可能?我知道明显的解决方案是抛弃XML-RPC,但我认为这种设备不可行,因为我无法控制从“服务器”实施任何其他协议。这也使得不可能做MultiCall,因为我不能为MultiCall添加有效的指令。 MultiCall必须在服务器端实现吗?例如,如果我有方法1(),方法2()和方法3()全部由服务器实现,那么这个代码块是否可以在一个回复中执行它们?我从目前的测试中假设没有,因为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

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

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