Я использую Twisted Perspective Broker для связи между клиентом и сервером.Клиент запрашивает у сервера удаленный метод 'remote_ssh'.Это заставляет сервер PB инициировать соединение SSH с использованием библиотеки SSH Paramiko и получать конфигурацию с удаленного устройства.
Это все работает нормально, но когда я выполняю это для нескольких удаленных устройств, я вижу следующее поведение - клиент Perspective Broker отправляет все запросы на сервер PB.Затем сервер PB выполнит эти запросы по одному (что нормально), но он не вернет ЛЮБЫХ результатов, пока они ВСЕ не завершат.
Вот соответствующий код на стороне сервера PB:
class RMethods(pb.Root):
def remote_ssh(self, aDict):
self.login('SSH', aDict) # Login to remote device
response = self.aSSH.retrieve() # Retrieve the config
self.aSSH.close()
return response
if __name__ == "__main__":
reactor.listenTCP(1885, pb.PBServerFactory(RMethods()))
reactor.run()
Просматривая различную информацию системного уровня (TCPDump и netstat), я вижу следующее (предположим, 5 вызовов удаленного метода):
Вызов remote_ssh с клиента PB на сервер PB дляпять удаленных устройств происходят примерно в одно и то же время
self.login device 1
self.aSSH.retrieve() device 1
self.aSSH.close() device 1
self.login device 2
self.aSSH.retrieve() device 2
self.aSSH.close() device 2
...
self.login device 5
self.aSSH.retrieve() device 5
self.aSSH.close() device 5
return results for all 5 devices
Я не понимаю, почему он ожидает возврата результатов (т.е. почему он ожидает, пока устройство 5 завершит работу, прежде чем будут возвращены результаты для устройства 1).