最近把一套项目植到另外一套环境中,发觉某个xmlrpc 服务端的返回非常慢,但是把服务器改为公网ip后又没有问题。
根据这个问题我尝试着问了一下google “xmlrpc response slow” , 结果还真有人遇到相同的问题,说是因为服务器没有配置host的原因,因为每次返回的时候BaseHTTPRequestHandler 都会调用log_message 方法记录一些日志信息,而log_message方法需要知道请求的host 。 问题就出在这里,当没有host的时候程序会调用_socket 的gethostname()方法,而服务器上并没有配置驿应的host。
我想大家还是比较关心如果解决这个问题
方法一: 在服务器端添加host 映射,也就是修改hosts文件。
方法二: 修改代码。下面有两段示例代码,一段是未修改之前返回慢的,一段是修改后问题解决了的。
import SimpleXMLRPCServer
class FuncGroup:
"""Just hold the funcs to be used in web service"""
def hi(self,val):
return "hi there"
#create server and start it
server_address = ('localhost',8000) # (address, port)
server = SimpleXMLRPCServer.SimpleXMLRPCServer(server_address)
server.register_instance(FuncGroup()) #reg. functions/class instance
server.serve_forever()
修改后
import SimpleXMLRPCServer
#new code
import BaseHTTPServer
def not_insane_address_string(self):
host, port = self.client_address[:2]
return '%s (no getfqdn)' % host #这里省去了获取host的方法
BaseHTTPServer.BaseHTTPRequestHandler.address_string = not_insane_address_string
#end new code
class FuncGroup:
"""Just hold the funcs to be used in web service"""
def hi(self,val):
return "hi there"
#create server and start it
server_address = ('localhost',8000) # (address, port)
server = SimpleXMLRPCServer.SimpleXMLRPCServer(server_address)
server.register_instance(FuncGroup()) #reg. functions/class instance
server.serve_forever()
文章参考:http://www.answermysearches.com/xmlrpc-server-slow-in-python-how-to-fix/2140/