[英]Client/server on python-twisted
我正在嘗試制作一個Twisted應用程序,該應用程序一方面是XMLRPC服務器,另一方面是特殊非對稱二進制協議的客戶端(我們稱其為“ binary”),現在它的工作方式如下:
現在可以使用,但是我想放棄輪詢程序。
但是,當我處於xmlrpc請求處理過程中時,“二進制”協議交換不會執行,因此我從“二進制”服務器中從未得到結果。
你有什么建議? 線程分開? 還有嗎
from twisted.internet import reactor
reactor.connectTCP(globalconf.cfgBinServerAddr, globalconf.cfgBinServerPort, BinFactory(binProtocol))
reactor.listenTCP(globalconf.xmlrpcPort, server.Site(xmlrpcProtocol))
reactor.run()
這是一個示例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()
以及相應的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.