2012-07-16 127 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比網絡快得多)。

如果可能的話,您可能需要考慮向設備發送多條命令,而不必等待第一條命令的響應。如果設備可以一次處理多個請求,那麼這可能是有益的。即使設備只按順序處理請求,您仍然可以在設備上等待下一個請求,以便在處理完前一個請求之後沒有延遲。如果設備以這種方式串行化請求,那麼這就是你可以做的最好的事情。