首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python上的客户机/服务器-扭曲

python上的客户机/服务器-扭曲
EN

Stack Overflow用户
提问于 2013-12-07 16:15:10
回答 1查看 352关注 0票数 2

我试图制作一个Twisted应用程序,它一方面是一个XMLRPC服务器,另一方面是一个特殊的非对称二进制协议的客户机(让我们称之为“二进制”),现在它的工作方式如下:

  1. 接收xmlrpc请求并返回请求id (I是服务器)
  2. 请求“二进制”服务器(我是客户端)
  3. xmlrpc客户端使用(1)中给出的请求id发出轮询请求。
  4. 如果“二进制”协议已经给出了轮询请求,则返回“稍后再试”或返回实际结果。

现在它起作用了,但我想放弃投票过程。

但是当我在xmlrpc请求处理过程中时,“二进制”协议交换不会执行,所以我从没有从“二进制”服务器获得结果。

你有什么建议吗?分开的线?还有别的吗?

代码语言:javascript
复制
from twisted.internet import reactor

reactor.connectTCP(globalconf.cfgBinServerAddr, globalconf.cfgBinServerPort, BinFactory(binProtocol))

reactor.listenTCP(globalconf.xmlrpcPort, server.Site(xmlrpcProtocol))
reactor.run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-07 18:56:58

  1. 接收xmlrpc请求。如果需要计算请求id,请向“二进制”服务器发出请求。不要从方法返回
  2. 在同一方法中向“二进制”服务器(您是客户端)发出异步请求。还没回来
  3. 删除此步骤( xmlrpc请求尚未完成,无需轮询)
  4. 返回一个延迟的“真实结果”。你完了。当xmlrpc机器准备好给xmlrpc客户端时,它将返回真实的结果。

下面是一个返回延迟子进程输出的示例xmlrpc服务器:

代码语言:javascript
复制
#!/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客户端:

代码语言:javascript
复制
#!/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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20443535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档