Медленный XML-RPC в Windows 7 с XML-RPC.NET - PullRequest
1 голос
/ 10 февраля 2010

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

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

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

Мой поиск в Google вернул мне некоторые проблемы, связанные с использованием Windows IPv6, но наш запрос к серверу включает адрес IPv4 (не имя хоста) в той же подсети. В любом случае я отключил IPv6, но ничего не изменилось.

Есть ли еще способы проверить возможные причины задержки?

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Существует ошибка , которая влияет на BaseHTTPServer и его подклассы (включая SimpleXMLRPCServer). По сути, ваш сервер может вызывать функцию socket.getfqdn для каждого IP-адреса, который он пытается зарегистрировать. Эта статья , вероятно, объясняет это лучше.

Обходной путь описывается там, для 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 голосов
/ 10 февраля 2010

Запустите захват пакета на клиентском компьютере, проверьте время сетевого трафика и время вызова функции.

Это может помочь вам определить, где находится задержка в вашем медленном процессе, например время запуска приложения, разрешение имени и т. д.

Как вы обращаетесь к серверу с клиента? По IP? По полному доменному имени? Одинаков ли метод адресации в каждом из используемых вами приложений?

Если вы вызываете одну и ту же удаленную процедуру несколько раз из одного и того же медленного приложения, увеличится ли затраченное время линейно?

...