2010-02-10 1 views
1

Я рассматриваю возможность использования XML-RPC.NET для связи с сервером XML-RPC Linux, написанным на Python. Я попробовал пример приложения (MathApp) из XML-RPC.NET от Cook Computing, но для приложения потребовалось 30 секунд, чтобы добавить два номера в пределах одной локальной сети с сервером.Медленный XML-RPC в Windows 7 с XML-RPC.NET

Я также попытался запустить простой клиент, написанный на Python в Windows 7, для вызова того же сервера, и он ответил за 5 секунд. Аппарат имеет 4 ГБ ОЗУ с сопоставимой вычислительной мощностью, поэтому это не проблема.

Затем я попытался вызвать сервер из системы Windows XP с Java и PHP. Оба ответа были довольно быстрыми, почти мгновенно. Сервер также быстро реагировал на localhost, поэтому я не думаю, что задержка возникает из-за сервера.

Мой googling возвратил мне некоторые проблемы, связанные с использованием 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). В принципе, ваш сервер, скорее всего, вызовет функцию socket.getfqdn для каждого IP-адреса, который он пытается зарегистрировать. Это 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 import BaseHTTPRequestHandler –

 Смежные вопросы

  • Нет связанных вопросов^_^