Мы разрабатываем клиент-серверное приложение на основе XML-RPC. Серверная часть должна знать IP-адрес каждого клиента по каждому запросу.
Для этого мы смешиваем SocketServer.ThreadingMixIn с SimpleXMLRPCServer и подклассом SimpleXMLRPCRequestHandler, чтобы переопределить его метод _dispatch. Ниже приведен код:
class ThreadedXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer.SimpleXMLRPCServer):
pass
class RequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
def _dispatch(self, method, params):
function = self.server.funcs[method]
def decor(function, ip_addr):
def new_function(*args):
try:
return function(ip_addr, *args)
except Exception, err:
log_msg('Exception ocurred in XMLRPC thread (%s)!' % err)
return new_function
return decor(function, self.client_address[0])(*params)
Проблема в том, что иногда IP-адреса запроса и данные запроса обрабатываются вперемешку, т.е. е. IP-адрес запроса не соответствует его реальному адресу.
Что-то не так с последней строкой _dispatch или мы что-то упустили?
Спасибо!