2012-07-16 4 views
0

필자는 본질적으로 블랙 박스 인 장치로 작업하고 있으며 알려진 통신 방법은 XML-RPC뿐입니다. 그것은 서로 후에 매우 빨리 두 명령을 실행해야 할 때를 제외하고는 대부분의 필요에 따라 작동합니다. 오버 헤드와 RPC 응답을 기다리기 때문에 원하는만큼 빠르지는 않습니다.xmlrpclib의 속도 향상

내 주요 질문은이 기능을 사용하려면이 오버 헤드를 어떻게 줄일 수 있습니까? 나는 명백한 해결책이 XML-RPC를 도랑 (Ditch)하는 것이지만, 나는이 장치가 가능하다고 생각하지 않는다. 왜냐하면 나는 "서버"에서 다른 프로토콜을 구현하는 것을 통제 할 수 없기 때문이다. 또한 MultiCall에 대한 올바른 지침을 추가 할 수 없기 때문에 MultiCall을 수행 할 수 없습니다. MultiCall은 서버 측에서 구현해야합니까? 예를 들어, method1(), method2() 및 method3()이 모두 서버에서 이미 구현되어있는 경우이 코드 블록을 모두 한 번에 실행하면됩니까? 난 지금까지 내 테스트에서 아니오로 가정합니다. the documentation은 서버 측에서 명령을 초기화해야하는 예제를 보여줍니다. 사용되는 기본 일에 반대

server=xmlrpclib.ServerProxy(serverURL) 
multicall=xmlrpclib.MultiCall(server) 
multicall.method1() 
multicall.method2() 
mutlicall.method3() 
multicall() 

또한, XMLRPCLIB의 소스를 통해보고, 나는 "FastParser"에 대한 참조를 참조하십시오. 그러나, 나는이 파서를 기본값보다 어떻게 사용할지를 결정할 수 없다. 또한 the comment on this answer은 한 번에 한 문자 씩 구문 분석한다고 언급합니다. 나는 이것이 관련이 있다고 생각하지만,이 설정을 어떻게 바꿀지 전혀 모르겠습니다.

답변

0

요청 또는 응답의 대량 크기가 매우 큰 경우가 아니면 파서를 변경하면 처리 시간이 영향을받지 않습니다 (CPU가 네트워크보다 훨씬 빠르기 때문에).

가능한 경우 첫 번째 장치의 응답을 기다리지 않고 둘 이상의 명령을 장치로 보내는 것이 좋습니다. 장치가 동시에 여러 요청을 처리 할 수 ​​있다면 이점이 있습니다. 장치가 순서대로 요청을 처리하는 경우에도 장치에서 대기중인 다음 요청을 처리 할 수 ​​있으므로 이전 요청을 처리 한 후에 지연이 없습니다. 장치가 이런 방식으로 요청을 직렬화하면 사용자가 할 수있는 최선의 방법이 될 것입니다.