2010-02-10 54 views
1

我正在考慮使用XML-RPC.NET與用Python編寫的Linux XML-RPC服務器進行通信。我已經嘗試了Cook Computing的XML-RPC.NET示例應用程序(MathApp),但應用程序需要30秒才能在服務器的相同LAN中添加兩個數字。Windows 7中使用XML-RPC.NET緩慢XML-RPC

我也嘗試在Windows 7上運行一個用Python編寫的簡單客戶機來調用同一臺服務器,並在5秒鐘內響應。該機器具有4 GB的RAM,具有可比的處理能力,所以這不是問題。

然後我試着用Java和PHP從Windows XP系統調用服務器。兩個迴應都非常快,幾乎是瞬間的。服務器也在本地主機上快速響應,所以我不認爲服務器會產生延遲。

我的谷歌搜索返回了一些有關Windows使用IPv6的問題,但我們對服務器的調用確實在同一子網中包含了IPv4地址(不是主機名)。無論如何,我關掉了IPv6,但沒有任何改變。

有沒有更多的方法來檢查延遲的可能原因?

+0

獲得的Wireshark(http://www.wireshark.org/),看看發生了什麼事在電線上 - 這很可能會指向你的罪魁禍首(或者至少縮小範圍)。特別是因爲你可以將它與有效的溝通進行比較。 –

+0

xml-rpc並非以快速發展而聞名(即使這裏可能存在問題),您可能需要查看ICE(www.zeroc.com),它將提供相同類型的功能,速度更快。 –

回答

0

在客戶端計算機上運行數據包捕獲,檢查網絡流量計時與函數調用的時間。

這可以幫助您確定緩慢過程中的延遲時間,例如,應用程序啓動時間,名稱解析等。

您如何從客戶端尋址服務器?通過IP?通過FQDN?您使用的每個應用程序中的尋址方法是否相同?

如果您從相同的緩慢應用程序多次調用相同的遠程過程,所用的時間是否線性增加?

1

a bug影響BaseHTTPServer及其子類(包括SimpleXMLRPCServer)。基本上,您的服務器可能會爲其嘗試登錄的每個IP地址調用socket.getfqdn函數。這article可能解釋得更好。

解決方法描述那裏,TL; DR:

import BaseHTTPServer 
def not_insane_address_string(self): 
    host, port = self.client_address[:2] 
    return '%s (no getfqdn)' % host #used to call: socket.getfqdn(host) 
BaseHTTPServer.BaseHTTPRequestHandler.address_string = \ 
    not_insane_address_string 
+0

完美工作:對於Python 3.1使用從http.server導入BaseHTTPRequestHandler –