我试图在透视代理中实现一个简单的服务器回复。在
可能的实施(如有可能,请提出其他建议):
客户机请求服务器执行一个服务器方法,服务器执行然后回复(通过执行客户机方法,其唯一目的是打印消息):
[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
谢谢。在
最简单的方法是获取服务器需要使用的客户端对象并将其传递给服务器。几乎任何我能想到的解决方案都以这个为核心。在
将客户端的
got_obj
方法改为如下所示:并将
^{pr2}$remote_SomeFunc
的实现改为如下所示:您可能需要研究Twisted Cred作为一种更结构化的方式来管理对客户机对象的引用,但是cred只是在Perspective Broker的这一特性的基础上构建它的更抽象、更具特色的接口。在
不过,请注意,我在上面说了“差不多”。。。在
请记住,Twisted的Perspective Broker实现对延迟有很好的集成支持。如果
remote_
方法返回Deferred
,则在Deferred
激发之前,不会向方法调用发送响应,然后将结果作为方法调用的结果发送。您可以考虑将client_print
的逻辑放入由self.server.callRemote("SomeFunc", SomeData)
返回的Deferred
上的回调,并使服务器的remote_SomeFunc
返回应答,可以是同步的,也可以是异步的(如Deferred
)。在相关问题 更多 >
编程相关推荐