[英]Client/server on python-twisted
I am trying to make a Twisted application that is an XMLRPC server on the one hand and a client of special asymmetric binary protocol on the other (let's call it "binary") Now it works like this: 我正在尝试制作一个Twisted应用程序,该应用程序一方面是XMLRPC服务器,另一方面是特殊非对称二进制协议的客户端(我们称其为“ binary”),现在它的工作方式如下:
Now it works, but I want to discard polling procedures. 现在可以使用,但是我想放弃轮询程序。
But while I am inside xmlrpc request processing procedure, "binary" protocol exchange doesn't perform, so I never get a result from "binary" server. 但是,当我处于xmlrpc请求处理过程中时,“二进制”协议交换不会执行,因此我从“二进制”服务器中从未得到结果。
What can you suggest? 你有什么建议? Separate threads? 线程分开? Something else? 还有吗
from twisted.internet import reactor
reactor.connectTCP(globalconf.cfgBinServerAddr, globalconf.cfgBinServerPort, BinFactory(binProtocol))
reactor.listenTCP(globalconf.xmlrpcPort, server.Site(xmlrpcProtocol))
reactor.run()
Here's an example xmlrpc server that returns a deferred subprocess output: 这是一个示例xmlrpc服务器,它返回延迟的子进程输出:
#!/usr/bin/env python
from timeit import default_timer as timer
from twisted.internet import reactor, utils
from twisted.web import xmlrpc, server
class Example(xmlrpc.XMLRPC):
def xmlrpc_echo(self, x):
"""Sanity check."""
return x
def xmlrpc_getoutput(self):
shell_command = "echo before sleep; sleep 10; echo after sleep"
start = timer()
d = utils.getProcessOutput("/bin/sh", ["-c", shell_command])
print("Deferred created in %.2f seconds" % (timer() - start,)) # instant
return d
reactor.listenTCP(9657, server.Site(Example()))
reactor.run()
And the corresponding xmlrpc client: 以及相应的xmlrpc客户端:
#!/usr/bin/env python
from timeit import default_timer as timer
import xmlrpclib
s = xmlrpclib.Server('http://localhost:9657/')
def report_delay(func, *args):
start = timer()
print("Result %r took us %.2f seconds" % (func(*args), timer() - start))
report_delay(s.echo, "Mor-ee-air-teeeee") # should be instant
report_delay(s.getoutput) # should be ~10 seconds
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.