用Twisted Perspective B实现可引用对象clientside

2024-09-30 08:17:03 发布

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

我试图在透视代理中实现一个简单的服务器回复。在

可能的实施(如有可能,请提出其他建议):

客户机请求服务器执行一个服务器方法,服务器执行然后回复(通过执行客户机方法,其唯一目的是打印消息):

[Client-side]:

class ClientPrint(pb.Referenceable):
    def remote_clientprint(self, message):
        print "Printing the message from the server: ", message

[Server-side]:

class RootServerObject(pb.Root):
    def remote_OneFunc(self, ...):
        ...
        print "Now sending the reply..."
       *get ClientPrint object?*
       clientprintobj.callRemote("clientprint", "this is the reply!")

如何实现客户端对象的抓取?有没有比获取客户端对象并调用只打印的客户端方法更好的实现服务器回复的方法?在

下面是我尝试实现回复的完整代码:

[客户端]:

^{pr2}$

[服务器端]:

class RootServerObject(pb.Root):
    def __init__(self):
        self.DataOut = None

    def remote_SomeFunc(self, SomeData):
        self.DataOut = hash(SomeData)
        print "Now sending reply..."
        *implement a reply?*

也许有一些更高级的Twisted(或Twisted-PB)特性可以使这个过程更简单。在

文档:https://twistedmatrix.com/documents/12.3.0/core/howto/pb-usage.html#auto3

谢谢。在


Tags: the方法self服务器客户端message客户机remote
1条回答
网友
1楼 · 发布于 2024-09-30 08:17:03

最简单的方法是获取服务器需要使用的客户端对象并将其传递给服务器。几乎任何我能想到的解决方案都以这个为核心。在

将客户端的got_obj方法改为如下所示:

def got_obj(self, rootsrvobj):
    print "Got root server obj:", rootsrvobj
    self.server = rootsrvobj
    def2 = self.server.callRemote("SomeFunc", self, SomeData)

并将remote_SomeFunc的实现改为如下所示:

^{pr2}$

您可能需要研究Twisted Cred作为一种更结构化的方式来管理对客户机对象的引用,但是cred只是在Perspective Broker的这一特性的基础上构建它的更抽象、更具特色的接口。在

不过,请注意,我在上面说了“差不多”。。。在

请记住,Twisted的Perspective Broker实现对延迟有很好的集成支持。如果remote_方法返回Deferred,则在Deferred激发之前,不会向方法调用发送响应,然后将结果作为方法调用的结果发送。您可以考虑将client_print的逻辑放入由self.server.callRemote("SomeFunc", SomeData)返回的Deferred上的回调,并使服务器的remote_SomeFunc返回应答,可以是同步的,也可以是异步的(如Deferred)。在

相关问题 更多 >

    热门问题