pythontwisted上的客户机/服务器

2024-05-29 10:07:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

现在它可以工作了,但是我想放弃轮询过程。在

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

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

from twisted.internet import reactor

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

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

Tags: 服务器id应用程序协议客户端客户机过程二进制
1条回答
网友
1楼 · 发布于 2024-05-29 10:07:22
  1. 接收xmlrpc请求。计算请求id,如果您需要它向“二进制”服务器发出请求。不要从方法返回
  2. 以相同的方法向“二进制”服务器(您是客户机)发出异步请求。还没回来
  3. 删除此步骤(xmlrpc请求尚未完成,没有要轮询的内容)
  4. 返回延迟的“实际结果”。你完成了。当xmlrpc机器准备好提交给xmlrpc客户机时,它将返回实际结果

以下是返回延迟子进程输出的示例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客户端:

^{pr2}$

相关问题 更多 >

    热门问题