- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我的 simpleXMLRPC 服务器有问题。我的程序中有一台服务器,可以从另一台服务器访问它。让我们将具有 simpleXMLServer 实例的计算机称为 server,将另一台服务器称为 client。
所以当客户端连接到我的服务器时,服务器调用服务器中的一个函数。此功能有时可能需要很长时间才能执行(最多 5 分钟),然后发送一条很长的消息。
class Report(object):
__instance = None
def __new__(self):
if self.__instance is None:
self.__instance = object.__new__(self)
self.__instance.__init()
return self.__instance
def __init(self):
self._lastRequestTime = 0
self._lastRequest = ''
self._minInterval = 1
self._timeout = 2
self.__lock = Utils.Threading.Lock()
self.__lockEvent = Utils.Threading.Lock()
self._event = Utils.Threading.Event()
reportThread = threading.Thread(name = 'reportThread',
target = self.reportLoop)
reportThread.start()
def _reportAll(self):
tmp = Somewhere.reportAll()
try:
self.__lock.acquire()
self._lastRequest = tmp
finally:
self.__lock.release()
def reportLoop(self):
while 1:
self._event.wait()
self._reportAll()
try:
self.__lockEvent.acquire()
self._event.clear()
finally:
self.__lockEvent.release()
def reportAll(self):
if abs(Utils.Time.time() - self._lastRequestTime) > self._minInterval or len(self._lastRequest) == 0:
self._lastRequestTime = time.time()
else:
return self._lastRequest
try:
self.__lockEvent.acquire()
self._event.set()
finally:
self.__lockEvent.release()
try:
self.__lock.acquire()
return self._lastRequest
finally:
self.__lock.release()
这是我创建服务器的方式:
def startListen(self):
logging.basicConfig(level = logging.DEBUG)
try:
# Create server
self._server = SimpleXMLRPCServer(("192.168.0.57", 49007), requestHandler=RequestHandler)
self._server.register_introspection_functions()
self._server.register_function(Report().reportAll, 'reportAll')
self._server.serve_forever()
except:
return self.restart()
为了避免客户端服务器长时间等待(这可能会卡住客户端程序),我在客户端服务器中创建了一个信号,无论 5 秒后发生什么情况,它都会停止客户端线程(我的客户端实际上是一个实例Ganglia 的守护进程 gmond)。这是客户端的代码:
def getMessage(self):
def timeoutHandler(signum, frame):
raise Exceptions.BFException('Timeout %d s lasted' % defaultTimeout)
self._client = None
msg = None
# To be sure that will not freeze, we set a signal
signal.signal(signal.SIGALRM, timeoutHandler)
signal.alarm(defaultTimeout)
try:
self._client = xmlrpclib.ServerProxy('http://192.168.0.57:49007')
msg = self._client.reportAll()
except:
print 'The connection has not been established'
self._client = None
msg = None
finally:
signal.alarm(0)
return msg
但是无论我做什么,有时它会完全卡住并且出现错误:
Exception happened during processing of request from ('192.168.0.85', 55417)
Traceback (most recent call last):
File "C:\Python26\lib\SocketServer.py", line 283, in _handle_request_noblock
self.process_request(request, client_address)
File "C:\Python26\lib\SocketServer.py", line 309, in process_request
self.finish_request(request, client_address)
File "C:\Python26\lib\SocketServer.py", line 322, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Python26\lib\SocketServer.py", line 617, in __init__
self.handle()
File "C:\Python26\lib\BaseHTTPServer.py", line 329, in handle
self.handle_one_request()
File "C:\Python26\lib\BaseHTTPServer.py", line 323, in handle_one_request
method()
File "C:\Python26\lib\SimpleXMLRPCServer.py", line 491, in do_POST
self.wfile.write(response)
File "C:\Python26\lib\socket.py", line 318, in write
self.flush()
File "C:\Python26\lib\socket.py", line 297, in flush
self._sock.sendall(buffer(data, write_offset, buffer_size))
error: [Errno 10053] Une connexion établie a été abandonnée par un logiciel de votre ordinateur hôte
如果我在 Debian 发行版中做同样的事情,我会得到同样的错误,除了我会得到:[Errno 32] Broken Pipe。
无论我做什么,如果再次调用此服务器,我总是在第一次收到此错误后收到此错误,并且根本没有响应。我不知道该如何处理。我已经被困了好几天了...
有人能帮帮我吗?
谢谢
最佳答案
基本上您正在终止客户端的连接,因此服务器报告连接已终止。
我不确定为什么在那之后您没有收到任何响应,但需要考虑的一件事是服务器是单线程的,因此在进行缓慢操作时无法处理其他连接。
另请注意,信号可能不会传递到与调用 signal()
相同的线程,因此这可能会给您带来问题,除非 python 在幕后做了一些魔术以确保正确线程被通知。同样,我不确定是否普遍允许抛出异常,当然,对于 C,您不应该期望总是在主堆栈上。
关于python - 简单的 XMLRPC 服务器 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6735197/
服务器代码(基于 Python 库引用): from xmlrpc.server import SimpleXMLRPCServer from xmlrpc.server import SimpleX
有什么方法可以同时从一个 xmlrpc 客户端向不同的 xmlrpc 服务器发出多个调用。 我的服务器代码如下所示:(我将让这段代码在两台机器上运行,server1 和 server2) class
我在我的 Apache 服务器上安装了 xmlrpc-epi,我需要使用它来连接到 XMLRPC 服务器。我应该做什么 - 除了 xmlprc-api 之外,我还需要在我的服务器上下载和/或安装什么吗
我正在构建一个使用wordpress-java库的android应用,但出现了"Failed to resolve: redstone.xmlrpc:xmlrpc:1.1.1"错误。 Build.Gr
实际上需要传递一个参数,该参数是一个xml作为带有xmlrpc Node 模块的对象github.com/baalexander/node-xmlrpc; 客户端调用是: client.methodC
我有一个运行 Python 的 XML RPC 服务器。 它作为 SimpleXMLRPCServer 类的实例实现。 from SimpleXMLRPCServer import SimpleXML
我不会从表格中读取行来将主题放在列表中 php脚本 $url_obj='http://'.$host.':8069/xmlrpc/object'; $sock=new xmlrpc_client($u
如何将脚本执行错误传递给 XMLRPC 响应,以免出现故障异常? 也许我没有正确设置: 在 XMLRPC 服务器中,我添加了 Zend_XmlRpc_Server_Fault::attachFault
有关如何使用 XMLRPC 实现基本身份验证的任何线索或示例org.apache.xmlrpc.webserver.WebServer? 我正在使用 Java API apache-xmlrpc-3.
我有一个使用 GHC 运行的 Haskell RPCXML (HaXR) 服务器进程,它需要执行它传递的任何函数。这些函数都将在运行时定义,因此编译后的服务器不会知道它们。 有没有办法在运行时加载函数
我使用 xmlrpc 服务器运行简单示例,然后按键盘上的 Ctrl-C :)。 from SimpleXMLRPCServer import SimpleXMLRPCServerfrom time i
我正在使用 HTML5 + Phonegap 进行移动应用程序开发。目前正在使用 XMLRPC 开发移动应用程序,并且运行良好。 (Android 和 iOS) 我需要在浏览器中运行与网站 相同的应用
我想创建非阻塞扭曲的 xmlrpc,但我不知道。我想在 xmlrpc 中调用方法,并且每次都从任何客户端执行我的方法,无需等待。这是我的代码: from pymongo import MongoCli
是否有可能允许 Python simplexmlrpc 服务器的 xmlrpc 扩展(数据类型 long int)? 客户端使用 Apache xmlrpc,allows 8 byte integer
我正在寻找一种方法来防止多个主机同时向 Python XMLRPC 监听器发出命令。监听器负责运行脚本以在该系统上执行任务,如果多个用户试图同时发出这些命令,这些任务将会失败。有没有一种方法可以阻止所
本文整理了Java中org.apache.xmlrpc.XmlRpcConfig类的一些代码示例,展示了XmlRpcConfig类的具体用法。这些代码示例主要来源于Github/Stackoverfl
对你们来说很简单的问题。 我可以通过 xmlrpc 删除未附加的媒体吗?如果是这样,请指导我了解什么功能可以做到这一点。谢谢 最佳答案 绝对可以,你用wp.deletePost以 post_id 作为
我的任务是创建一个 API,用于从 Flash 应用程序和旧版 CMS(非 PHP)检索内容并将其添加到 Wordpress。我的计划是利用现有的默认 xmlrpc 端点,并通过创建一个 Hook 到
所以我有一个 XMLRPC 服务器,它有一个名为 start_apps 的命令 通常从Python我会像这样运行它 import xmlrpclib app=xmlrpclib.ServerProxy
所以我有一个 XMLRPC 服务器,它有一个名为 start_apps 的命令 通常从Python我会像这样运行它 import xmlrpclib app=xmlrpclib.ServerProxy
我是一名优秀的程序员,十分优秀!