Windows 7 中使用 XML-RPC.NET 的 XML-RPC 缓慢问题
我在考虑使用 XML-RPC.NET 来和一个用 Python 写的 Linux XML-RPC 服务器进行通信。我试过 Cook Computing 的 XML-RPC.NET 中的一个示例应用(MathApp),但是这个应用在同一个局域网内加两个数字居然花了 30 秒。
我还尝试在 Windows 7 上运行一个用 Python 写的简单客户端去调用同一个服务器,结果响应只用了 5 秒。那台机器有 4 GB 的内存,处理能力也差不多,所以这不是问题。
然后我又在 Windows XP 系统上用 Java 和 PHP 调用服务器,两个的响应都非常快,几乎是立刻就回来了。服务器在本地调用时也很快,所以我觉得延迟不是服务器的问题。
我在网上查了一些关于 Windows 使用 IPv6 的问题,但我们的服务器调用确实是用的 IPv4 地址(不是主机名),而且是在同一个子网里。无论如何,我把 IPv6 关掉了,但情况没有改变。
还有什么其他方法可以检查延迟的可能原因吗?
2 个回答
0
在客户端机器上运行一个数据包捕获工具,检查网络流量的时间和函数被调用的时间对比。
这样可以帮助你找出慢的过程中的延迟在哪里,比如应用程序启动时间、名称解析等。
你是怎么从客户端连接到服务器的?是通过IP地址吗?还是通过完全合格的域名(FQDN)?你使用的每个应用程序的连接方式是一样的吗?
如果你从同一个慢应用程序多次调用同一个远程过程,所花的时间是线性增加的吗?
2
有一个bug,影响到BaseHTTPServer
及其子类(包括SimpleXMLRPCServer
)。简单来说,你的服务器可能会对每个它尝试记录的IP地址调用一次socket.getfqdn
这个函数。这篇文章可能解释得更清楚。
文章中提到的解决方法,简单来说就是:
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